0Pricing
Go Academy · Pelajaran

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 error

Mengembalikan 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.New untuk galat sederhana, fmt.Errorf untuk 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.

Semua pelajaran dalam kursus ini

  1. Interface error
  2. Membuat Error Khusus
  3. Pembungkusan dan Pelepasan Error
  4. panic, recover, dan defer
← Kembali ke Go Academy