Fungsi
Parameter, nilai balik ganda, dan fungsi variadic.
Pahami konsepnya
Fungsi mengemas langkah yang bisa dipanggil ulang. Parameter dan tipenya ditulis di dalam tanda kurung, sedangkan tipe nilai balik ditulis setelahnya: func jumlah(a, b int) int. Fungsi tanpa nilai balik tidak perlu menuliskan tipe balik sama sekali.
Go dapat mengembalikan beberapa nilai sekaligus — func bagi(a, b int) (int, error) — dan pola inilah yang dipakai hampir seluruh pustaka standar untuk melaporkan kegagalan. Nilai balik pun bisa diberi nama; variabelnya sudah tersedia di dalam fungsi dan return polos cukup untuk mengembalikan semuanya.
Parameter variadic (angka ...int) menerima seberapa pun argumen saat dipanggil, lalu berubah menjadi slice biasa di dalam fungsi. Ia wajib menempati posisi terakhir, dan slice yang sudah ada bisa dikirim utuh dengan akhiran ....
Coba contoh kode
package main
import "fmt"
func jumlah(angka ...int) int {
total := 0
for _, n := range angka {
total += n
}
return total
}
func main() {
fmt.Println(jumlah(2, 4, 6))
}Pemanggilan jumlah(2, 4, 6) mengemas tiga angka menjadi slice []int{2, 4, 6} di dalam fungsi. range menyusurinya sementara _ membuang indeks yang tidak dipakai; total dirangkum dan dikembalikan sebagai hasil akhir. Panggil dengan angka berbeda, atau kirim slice utuh dengan jumlah(data...), untuk merasakan kedua bentuknya.
Nilai balik ganda bernama
func minMax(angka []int) (min int, max int) {
min, max = angka[0], angka[0]
for _, n := range angka[1:] {
if n < min {
min = n
}
if n > max {
max = n
}
}
return // return polos: bawa min dan max
}
func main() {
kecil, besar := minMax([]int{7, 2, 9, 4})
fmt.Println(kecil, besar) // 2 9
}Karena nilai balik diberi nama (min dan max), keduanya sudah tersedia sebagai variabel lokal dan return polos mengembalikannya sekaligus. Pemanggil menampung keduanya dalam dua variabel — pola yang sama dipakai fungsi standar seperti os.Getpid.
Latihan singkat
Uji: lengkapi statistik agar memanggilannya dengan (7, 3, 9, 5) mencetak persis `9 6` (maksimum, rata-rata).