Halo teman-teman semuanya, jika kita baru belajar Golang (Go), pasti pernah merasa heran: "Kenapa setiap habis manggil fungsi harus selalu cek error dulu?"
Contohnya seperti ini:
user, err := FindUserByID(id)
if err != nil {
// tangani error
return
}
// lanjut gunakan user
Sekilas, ini terasa repetitif dan membosankan, apalagi kalau kita sebelumnya menggunakan JavaScript, PHP, atau Python yang punya try-catch
. Tapi percayalah, ada alasan kuat kenapa Go didesain seperti ini.
Yuk kita bahas kenapa di Go kita harus selalu cek error dulu.
1. Go Tidak Punya try-catch
Berbeda dengan banyak bahasa lain, Go tidak memiliki mekanisme try-catch
. Alih-alih melempar exception, Go lebih memilih pendekatan yang eksplisit: fungsi yang berpotensi gagal akan mengembalikan nilai error.
Contoh:
data, err := ReadFile("config.json")
if err != nil {
fmt.Println("Gagal baca file:", err)
return
}
fmt.Println("Isi file:", string(data))
Daripada error "meledak" di tengah-tengah program, Go meminta kita untuk mengecek dan menangani error di tempat kejadian.
2. Prinsip "Fail Fast"
Go menganut prinsip fail fast:
"Kalau ada masalah, hentikan dan tangani secepat mungkin."
Dengan memeriksa err
segera, kita tahu persis kapan dan di mana error terjadi, sehingga:
- Aplikasi jadi lebih aman
- Debugging jadi lebih mudah
- Kode jadi lebih mudah dirawat
3. Lebih Aman dari Panic
Coba lihat contoh ini:
var user User
err := db.First(&user, 999).Error
if err != nil {
// user tidak ditemukan
return
}
// lanjut akses user.Name
Bayangkan jika kita tidak cek err
, lalu langsung akses user.Name
. Bisa jadi:
user
belum diisi
- Program crash karena akses ke data kosong
Dengan mengecek error lebih dulu, kita mencegah kesalahan logika dan panic yang tidak perlu.
4. Kenapa Tidak Cek result != nil
?
Karena tidak semua result == nil
berarti error.
Contoh:
- Query database bisa mengembalikan hasil kosong (bukan error)
- Fungsi bisa mengembalikan nilai default walau ada error
Maka dari itu, Go memisahkan return value dan error secara eksplisit agar tidak ambigu.
Contoh Perbandingan JavaScript vs Go
-
JavaScript:
try {
const data = await fetchData();
console.log(data);
} catch (err) {
console.error("Gagal fetch:", err);
}
-
GoLang:
data, err := fetchData()
if err != nil {
fmt.Println("Gagal fetch:", err)
return
}
fmt.Println(data)
Di GoLang, kita menangani error dengan logika sendiri, bukan diserahkan ke mekanisme runtime seperti try-catch
.
Kesimpulan
Cek error dulu di Go bukan karena gaya lama atau aturan ketat, tapi karena:
- Go tidak punya
try-catch
- Go lebih suka pendekatan eksplisit dan aman
- Prinsip fail fast bikin kode lebih stabil dan mudah ditelusuri
Semoga artikel ini membantumu memahami filosofi di balik cek error dulu di Go.
Terima Kasih