Pesan error bukan musuh yang harus ditakuti, melainkan umpan balik paling jujur dari compiler. Compiler Go terkenal berusaha berbicara spesifik: hampir setiap pesan menunjuk lokasi persis sampai kolom, lalu menjelaskan apa yang salah. Keterampilan membaca pesan tersebut menentukan seberapa cepat kita kembali menulis kode. Pada chapter penutup section ini, kita sengaja membuat tiga program yang gagal dikompilasi, menjalankannya satu per satu, dan membedah setiap pesan error yang muncul hingga tuntas.

Anatomi Sebuah Pesan Error #

Seluruh pesan error compiler Go memakai pola yang sama: lokasi berkas, nomor baris, nomor kolom, lalu isi pesannya. Ambil contoh hasil nyata dari kasus pertama kita di bawah:

text
./error-unused.go:6:2: declared and not used: pesan

Pesan tersebut terurai menjadi tiga bagian:

BagianNilai pada contohArti
Berkas./error-unused.goBerkas yang bermasalah, relatif terhadap direktori aktif
Baris dan kolom6:2Baris ke-6, kolom ke-2, posisi persis masalahnya
Isi pesandeclared and not used: pesanPenjelasan masalah dari compiler

Kolom dihitung per karakter sejak awal baris, dimulai dari angka 1. Ketika kita menjalankan berkas secara langsung, output juga diawali baris # command-line-arguments, yaitu nama package sementara yang dibentuk go run untuk berkas-berkas tersebut. Baris header ini hanya konteks, bukan bagian dari pesan errornya.

Kasus 1: Variabel Dideklarasikan tetapi Tidak Dipakai #

Berkas error-unused.go pada folder chapter ini mendeklarasikan variabel pesan yang tidak pernah dipakai:

go
package main

import "fmt"

func main() {
	pesan := "Halo, Budi!"
	fmt.Println("Pesan sudah disiapkan")
}

Jalankan berkas tersebut dan amati penolakan compiler:

bash
go run error-unused.go

Output yang Dihasilkan:

text
# command-line-arguments
./error-unused.go:6:2: declared and not used: pesan

Lokasi 6:2 menunjuk tepat awal nama pesan pada baris keenam. Isi pesannya lugas: variabel pesan dideklarasikan, tetapi tidak digunakan di mana pun. Go menolak variabel nganggur karena variabel semacam itu hampir selalu tanda kekeliruan, misalnya nilai yang disimpan lalu dilupakan. Ada dua perbaikan yang sah: pakai variabel tersebut, misalnya mengganti statement cetak menjadi fmt.Println(pesan), atau hapus baris deklarasinya sama sekali.

Kasus 2: Identifier yang Tidak Dikenal #

Berkas error-undefined.go memuat kesalahan ketik klasik: pesann dengan dua n:

go
package main

import "fmt"

func main() {
	fmt.Println(pesann)
}

Jalankan berkas tersebut:

bash
go run error-undefined.go

Output yang Dihasilkan:

text
# command-line-arguments
./error-undefined.go:6:14: undefined: pesann

Kolom 14 menunjuk huruf pertama pesann, tepat di dalam tanda kurung fmt.Println(...). Pesan undefined: pesann berarti compiler tidak menemukan deklarasi apa pun dengan nama pesann di seluruh package. Penyebab paling umum adalah salah ketik, seperti kasus ini, atau variabel yang belum dideklarasikan. Perbaikannya tergantung niat kita: bila maksudnya variabel pesan yang sudah ada, perbaiki ejaannya; bila memang variabel baru, deklarasikan lebih dulu dengan := seperti di chapter Deklarasi Pendek .

Kasus 3: Kesalahan Sintaks #

Berkas error-sintaks.go kehilangan kurung kurawal penutup milik fungsi main:

go
package main

import "fmt"

func main() {
	fmt.Println("Halo, Siti!")

Jalankan berkas tersebut:

bash
go run error-sintaks.go

Output yang Dihasilkan:

text
# command-line-arguments
./error-sintaks.go:7:1: syntax error: unexpected EOF, expected }

Berkas hanya memiliki enam baris, tetapi compiler menunjuk 7:1: posisi tepat setelah baris terakhir, saat compiler menemui akhir berkas (EOF, end of file). Compiler mendapati expected } yang tidak pernah hadir, sehingga } yang hilang berada di suatu tempat sebelum posisi tersebut. Pola ini penting dipahami: untuk kesalahan sintaks, lokasi yang ditunjuk sering kali berada setelah titik masalah yang sebenarnya, jadi kita perlu membaca ke atas dari posisi tersebut. Perbaikannya satu baris saja: tambahkan } penutup setelah fmt.Println("Halo, Siti!").

Strategi Membaca Error #

Tiga kasus di atas melatih pola kerja yang sama. Baca pesan paling atas lebih dulu, burung lokasi baris-kolomnya di editor, pahami isi pesannya, lalu perbaiki. Setelah satu perbaikan, jalankan ulang programnya, karena satu kesalahan sering menyembunyikan kesalahan lain di belakangnya; compiler hanya melaporkan yang pertama kali ditemukan pada tahap tertentu. Perintah gagal selalu berhenti dengan exit code 1, tanda yang bisa kita periksa lewat echo $? seperti di chapter Menjalankan Program .

Dengan anatomi program, package main, fungsi main, import, fmt.Println, cara menjalankan, mengompilasi, dan kini membaca pesan error, bekal dasar kita sudah lengkap. Section berikutnya, Dasar Bahasa Go , mengajak kita mengolah data sungguhan dengan variabel, konstanta, dan tipe.

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

error-sintaks.go

Unduh berkas
go
package main

import "fmt"

func main() {
	fmt.Println("Halo, Siti!")

error-undefined.go

Unduh berkas
go
package main

import "fmt"

func main() {
	fmt.Println(pesann)
}

error-unused.go

Unduh berkas
go
package main

import "fmt"

func main() {
	pesan := "Halo, Budi!"
	fmt.Println("Pesan sudah disiapkan")
}