Interface error
Mengembalikan dan memeriksa error secara idiomatis
Interface error adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Filosofi Galat di Go
Go menangani galat sebagai nilai, bukan pengecualian. Fungsi mengembalikan error sebagai nilai kembalian terakhir. Pemanggil harus memeriksanya secara eksplisit:
package main
import ("fmt"; "strconv")
func main() {
n, err := strconv.Atoi("abc")
if err != nil {
fmt.Println("error:", err) // handle it
return
}
fmt.Println(n)
}Antarmuka Galat
error bawaan adalah antarmuka sederhana:
// Built into Go — no import needed
type error interface {
Error() string
}
// Any type with Error() string satisfies it
// nil means no errorMengembalikan Galat
Fungsi yang dapat gagal mengembalikan (value, error). Kembalikan nil jika tidak ada galat:
package main
import ("fmt"; "errors")
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Println(result)
}Pola if err != nil
Pemeriksaan if err != nil adalah idiom Go yang paling umum. Selalu tangani galat — jangan mengabaikannya:
package main
import ("fmt"; "os")
func main() {
f, err := os.Open("config.json")
if err != nil {
fmt.Println("open error:", err)
return
}
defer f.Close()
// use f...
_ = f
}errors.New — Nilai Galat Sederhana
errors.New membuat galat sederhana dengan pesan tetap:
package main
import ("fmt"; "errors")
var ErrNotFound = errors.New("not found")
func findByID(id int) (string, error) {
data := map[int]string{1: "Alice"}
v, ok := data[id]
if !ok {
return "", ErrNotFound
}
return v, nil
}
func main() {
_, err := findByID(99)
fmt.Println(err) // not found
}fmt.Errorf — Pesan Galat Berformat
fmt.Errorf membuat galat dengan konteks dari string berformat:
package main
import "fmt"
func openConfig(path string) error {
// Add context to the error message
return fmt.Errorf("openConfig %s: file not found", path)
}
func main() {
err := openConfig("/etc/app/config.yaml")
fmt.Println(err)
// openConfig /etc/app/config.yaml: file not found
}Galat Penanda
Galat penanda adalah nilai galat tingkat paket yang digunakan untuk perbandingan identitas:
package main
import ("fmt"; "errors")
var (
ErrTimeout = errors.New("timeout")
ErrPermission = errors.New("permission denied")
)
func doRequest() error { return ErrTimeout }
func main() {
err := doRequest()
if errors.Is(err, ErrTimeout) {
fmt.Println("request timed out — retrying")
}
}Mengabaikan Galat Merupakan Kesalahan
Go mengharuskan Anda menggunakan setiap variabel yang dideklarasikan — tetapi mengabaikan galat dengan _ tetap berhasil dikompilasi dan merupakan kesalahan umum yang harus dihindari:
package main
import "os"
func bad() {
os.Remove("temp.txt") // silently ignores error — bad practice
}
func good() error {
if err := os.Remove("temp.txt"); err != nil {
return err // propagate
}
return nil
}Konteks Galat: Menambahkan Informasi
Saat meneruskan galat ke atas tumpukan pemanggilan, tambahkan konteks yang menjelaskan operasi yang gagal:
package main
import "fmt"
func readConfig(path string) ([]byte, error) {
return nil, fmt.Errorf("readConfig: %w", fmt.Errorf("file %s not found", path))
}
func setup() error {
_, err := readConfig("/etc/app.cfg")
if err != nil {
return fmt.Errorf("setup: %w", err) // wrap with context
}
return nil
}
func main() {
err := setup()
fmt.Println(err) // setup: readConfig: file /etc/app.cfg not found
}Beberapa Nilai Kembalian Galat
Fungsi dapat mengembalikan galat dari beberapa titik kegagalan. Periksa setiap galat:
package main
import ("fmt"; "strconv")
func parseRange(minStr, maxStr string) (int, int, error) {
min, err := strconv.Atoi(minStr)
if err != nil { return 0, 0, fmt.Errorf("min: %w", err) }
max, err := strconv.Atoi(maxStr)
if err != nil { return 0, 0, fmt.Errorf("max: %w", err) }
if min > max { return 0, 0, fmt.Errorf("min %d > max %d", min, max) }
return min, max, nil
}
func main() {
lo, hi, err := parseRange("1", "10")
if err != nil { fmt.Println(err); return }
fmt.Println(lo, hi)
}Pemeriksaan Singkat
Apa arti nilai kembalian galat nil di Go?
Ringkasan: Antarmuka error
Konsep utama penanganan galat:
- Galat adalah antarmuka bawaan:
Error() string - Kembalikan
(value, error)— nil berarti berhasil errors.Newuntuk galat sederhana,fmt.Errorfuntuk galat berformat- Selalu periksa
if err != nil - Tambahkan konteks saat meneruskan galat ke atas tumpukan
- Jangan pernah mengabaikan galat secara diam-diam
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Interface error” gratis?
Ya — teks lengkap “Interface error” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Interface error”?
Mengembalikan dan memeriksa error secara idiomatis Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Interface error” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.