- 1. Go Tidak Punya try-catch
- 2. Prinsip "Fail Fast"
- 3. Lebih Aman dari Panic
- 4. Kenapa Tidak Cek result != nil?
- Contoh Perbandingan JavaScript vs Go
- Kesimpulan
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:
userbelum 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
Blog ini dibaca sebanyak 2.538 kali
{ setTimeout(() => { showShimmer = false; }, 300); })"
:class="{'opacity-0': !loaded, 'opacity-100': loaded}"
class="lazy w-full h-auto rounded-xl border border-white dark:border-neutral-700/80 transition-opacity duration-500"
loading="lazy"
/>
SAWERIA
Memuat komentar...