Multiple Return Values
Go memungkinkan fungsi untuk mengembalikan beberapa nilai sekaligus. Ini sangat berguna untuk mengembalikan hasil dan status error, atau beberapa nilai yang saling berhubungan.
Contoh Masalah
Bagaimana cara membuat fungsi yang mengembalikan beberapa nilai? Misalnya:
- Mengembalikan hasil perhitungan dan error
- Mengembalikan beberapa hasil perhitungan
- Mengembalikan status operasi dan data
Penyelesaian
package main
import (
"errors"
"fmt"
"math"
)
// 1. Fungsi dengan hasil dan error
func hitungAkar(angka float64) (float64, error) {
if angka < 0 {
return 0, errors.New("tidak bisa menghitung akar dari angka negatif")
}
return math.Sqrt(angka), nil
}
// 2. Fungsi dengan multiple hasil perhitungan
func hitungStatistik(angka []int) (min, max, avg float64) {
if len(angka) == 0 {
return 0, 0, 0
}
min = float64(angka[0])
max = float64(angka[0])
total := 0
for _, n := range angka {
if float64(n) < min {
min = float64(n)
}
if float64(n) > max {
max = float64(n)
}
total += n
}
avg = float64(total) / float64(len(angka))
return
}
// 3. Fungsi dengan status dan data
func cariNama(daftar []string, cari string) (bool, int) {
for i, nama := range daftar {
if nama == cari {
return true, i
}
}
return false, -1
}
func main() {
// Contoh 1: Menghitung akar
angka := 16.0
hasil, err := hitungAkar(angka)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Printf("Akar dari %.2f adalah %.2f\n", angka, hasil)
}
// Contoh dengan error
angkaNegatif := -4.0
hasil, err = hitungAkar(angkaNegatif)
if err != nil {
fmt.Println("Error:", err)
}
// Contoh 2: Statistik
nilai := []int{78, 92, 85, 60, 88}
min, max, avg := hitungStatistik(nilai)
fmt.Printf("\nStatistik Nilai:\n")
fmt.Printf("Minimum: %.2f\n", min)
fmt.Printf("Maximum: %.2f\n", max)
fmt.Printf("Rata-rata: %.2f\n", avg)
// Contoh 3: Pencarian
names := []string{"Alice", "Bob", "Charlie", "David"}
nama := "Charlie"
found, position := cariNama(names, nama)
if found {
fmt.Printf("\n%s ditemukan di posisi %d\n", nama, position)
} else {
fmt.Printf("\n%s tidak ditemukan\n", nama)
}
}
Penjelasan Kode
Return Nilai dan Error
- Pattern umum di Go
- Error sebagai nilai kedua
- Nil jika tidak ada error
Named Return Values
- Variabel return dideklarasikan
- Bisa menggunakan naked return
- Meningkatkan keterbacaan
Multiple Values
- Bisa mengembalikan banyak nilai
- Dipisahkan dengan koma
- Tipe bisa berbeda
Output
Akar dari 16.00 adalah 4.00
Error: tidak bisa menghitung akar dari angka negatif
Statistik Nilai:
Minimum: 60.00
Maximum: 92.00
Rata-rata: 80.60
Charlie ditemukan di posisi 2
Tips
- Gunakan multiple return untuk error handling
- Named return untuk fungsi kompleks
- Jangan terlalu banyak return value (max 3-4)
- Selalu periksa error yang dikembalikan
- Dokumentasikan arti setiap return value