Error Handling di Go
Go tidak menggunakan try/catch seperti bahasa lain. Sebagai gantinya, error adalah nilai yang dikembalikan dari fungsi dan harus di-handle secara eksplisit.
Interface error
type error interface {
Error() string
}
Setiap tipe yang mengimplementasikan method Error() string adalah sebuah error.
Pattern: if err != nil
hasil, err := lakukanSesuatu()
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Berhasil:", hasil)
Membuat Error
import (
"errors"
"fmt"
)
// Menggunakan errors.New
func bagi(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("pembagian dengan nol")
}
return a / b, nil
}
// Menggunakan fmt.Errorf (dengan format)
func cariUser(id int) (string, error) {
if id <= 0 {
return "", fmt.Errorf("ID tidak valid: %d", id)
}
return "Budi", nil
}
Kapan Return Error?
- Input tidak valid
- Operasi gagal (file tidak ditemukan, network error, dll)
- Kondisi yang tidak diharapkan
Jangan Abaikan Error!
// BURUK — error diabaikan
hasil, _ := bagi(10, 0)
// BAIK — error di-handle
hasil, err := bagi(10, 0)
if err != nil {
log.Fatal(err)
}