Materi
Go tidak memakai exception untuk kegagalan yang wajar terjadi, seperti teks yang bukan angka atau berkas yang tidak ada. Fungsi yang bisa gagal mengembalikan error sebagai nilai balik terakhir, dan pemanggil langsung memeriksanya dengan if err != nil. Error nil berarti berhasil. Saat gagal, nilai balik lainnya berisi nilai nol atau hasil sebagian, jadi nilai itu baru dipakai setelah err diperiksa.
error adalah interface dengan satu method, Error() string. errors.New("stok habis") membuat error sederhana. fmt.Errorf membuat error dengan pesan terformat, dan kata kerja %w membungkus error lain di dalamnya sambil menambah konteks: fmt.Errorf("ambil %d: %w", n, ErrStokHabis). Error yang sudah dibungkus tidak lagi sama dengan aslinya bila dibandingkan dengan ==, tetapi errors.Is(err, ErrStokHabis) menelusuri bungkusnya dan memberi true.
package main
import (
"fmt"
"strconv"
)
func main() {
n, err := strconv.Atoi("12a")
if err != nil {
fmt.Println("gagal:", err) // gagal: strconv.Atoi: parsing "12a": invalid syntax
return
}
fmt.Println(n * 2)
}