5. Error & Testing
Error adalah nilai
Section titled “Error adalah nilai”Go tidak punya try/catch. Fungsi yang bisa gagal mengembalikan error sebagai nilai terakhir, dan pemanggil wajib memeriksanya:
angka, err := strconv.Atoi("sepuluh")if err != nil { fmt.Println("error:", err) return}fmt.Println(angka * 2)error: strconv.Atoi: parsing "sepuluh": invalid syntaxPola if err != nil { ... } akan sangat sering kamu tulis. nil artinya “tidak ada error”.
Membuat error sendiri
Section titled “Membuat error sendiri”import "errors"
func Bagi(a, b int) (int, error) { if b == 0 { return 0, errors.New("tidak bisa membagi dengan nol") } return a / b, nil}Butuh pesan dengan nilai di dalamnya? Pakai fmt.Errorf("port %d sudah dipakai", port).
panic: kesalahan fatal
Section titled “panic: kesalahan fatal”Beberapa kesalahan membuat program langsung berhenti (panic), misalnya membagi dengan nol atau mengakses indeks slice di luar batas:
panic: runtime error: integer divide by zero
goroutine 1 [running]:main.main()Panic berarti ada bug. Kode yang baik memeriksa kondisinya lebih dulu dan mengembalikan error.
Unit test
Section titled “Unit test”Test ditulis di file berakhiran _test.go, berisi fungsi TestXxx(t *testing.T):
package main
import "testing"
func TestBagiNol(t *testing.T) { _, err := Bagi(1, 0) if err == nil { t.Error("Bagi(1, 0) seharusnya mengembalikan error") }}| Perintah | Fungsi |
|---|---|
go test |
jalankan semua test, tampilkan yang gagal saja |
go test -v |
tampilkan setiap test (=== RUN, --- PASS) |
go test -run Nol |
hanya test yang namanya cocok dengan Nol |
t.Error / t.Errorf menandai test gagal tapi lanjut; t.Fatal menghentikan test itu saat itu juga.
Kalkulator di lab ini punya bug yang membuatnya panic. Temukan lewat test, lalu perbaiki.
- Masuk ke
kalkulatordan hitung10 / 2dengango run . 10 2.Petunjuk
cd kalkulator && go run . 10 2 - Beri input bukan angka:
go run . sepuluh 2. Error daristrconv.Atoiditangani dengan rapi.Petunjuk
go run . sepuluh 2 - Sekarang bagi dengan nol:
go run . 1 0. Programnya panic!Petunjuk
go run . 1 0 - Jalankan unit test dengan
go test. Satu test gagal.Petunjuk
go test - Perbaiki
Bagidibagi.go: kalaub == 0, kembalikanerrors.New(...). Jalankango testsampaiok.Petunjuk
import "errors" ; if b == 0 { return 0, errors.New("tidak bisa membagi dengan nol") } - Lihat detail tiap test dengan
go test -v.Petunjuk
go test -v - Coba lagi
go run . 1 0— sekarang yang muncul pesan error, bukan panic.Petunjuk
go run . 1 0

