Error Handling & Defer

Duration: 15 min  •  Difficulty: Medium

Go tidak menggunakan try-catch seperti Java/JS. Go menganggap error adalah kejadian normal yang harus dicek secara eksplisit.

Pattern

Fungsi biasanya mengembalikan nilai terakhir sebagai error. Kita cek if err != nil.

MAIN.GO
package main
import (
"errors"
"fmt"
)
// Fungsi pembagian
func bagi(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("tidak bisa bagi dengan nol")
}
return a / b, nil // nil artinya tidak ada error
}
func main() {
hasil, err := bagi(10, 0)
// Cek apakah ada error
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Hasil:", hasil)
}
}

defer digunakan untuk menunda eksekusi kode sampai fungsi yang menampungnya selesai return.

When to use?

Sangat berguna untuk Clean Up Resource.

Contoh: Buka file -> Defer Tutup File. Ini menjamin file pasti ditutup walaupun ada error di tengah jalan.

MAIN.GO
package main
import "fmt"
func main() {
// Baris ini akan dijalankan PALING TERAKHIR
defer fmt.Println("3. Selesai cleanup")
fmt.Println("1. Mulai program")
fmt.Println("2. Proses data...")
// Disini defer baru berjalan
}