Error Yang Sering Ditemui Pada Golang
Short Story
Ketika ngoding dalam bahasa GO, saya menemui beberapa error yang sering muncul saat proses running. Nah, pada kali ini saya coba rangkumin beberapa error yg saya temukan, penyebabnya, serta solusinya. Tentunya nanti akan diupdate kembali jika menemukan error dengan tipe yang lain 😀
1. Nil pointer dereference
Nah, error ini bakal sering kalian alami dan temukan jika sebelumnya tidak pernah memakai bahasa pemrograman yang menggunakan pointer atau *. Error ini kadang cukup membuat frustasi, karena di golang exception errornya menurut saya "agak" kurang manusiawi sehingga sangat sulit dibaca, file apa, line berapa dan kadang keluar alamat memory yang cukup "menyeramkan" seperti failOnPanic(0x1400039e340) hehe 😀
Oke kita langsung saja ke contoh kasusnya, jadi semisal saya punya kode seperti dibawah ini:
package main
import (
"fmt"
)
type Mahasiswa struct {
name string
sks int
}
func (m *Mahasiswa) sedangSkripsi()bool{
if m.sks >= 144 {
return true
} else {
return false
}
}
func main() {
var budi *Mahasiswa
budi.sks = 144
fmt.Println(budi.sedangSkripsi())
}
Jika di run, maka akan menghasilkan error panic: runtime error: invalid memory address or nil pointer dereference, Kenapa?
Ternyata variabel budi yang tipenya pointer struct adalah nil yang menyebabkan invalid memory/address. Gampangannya belum reserved tempat memory tapi pake alamat memory. Solusinya gimana?
Ada 2 cara nih, pertama pake new(Mahasiswa) atau sekalian tanpa pointer jadi var budi Mahasiswa:
func (m *Mahasiswa) sedangSkripsi()bool{
if m.sks >= 144 {
return true
} else {
return false
}
}
func main() {
var budi *Mahasiswa = new(Mahasiswa)
budi.sks = 144
fmt.Println(budi.sedangSkripsi())
}
atau
func (m *Mahasiswa) sedangSkripsi()bool{
if m.sks >= 144 {
return true
} else {
return false
}
}
func main() {
var budi Mahasiswa
budi.sks = 144
fmt.Println(budi.sedangSkripsi())
}
Sekian, nanti diupdate lagi jika menemukan error kembali. semoga bermanfaat ya 😀
Comments