Lompat ke konten utama
←

Go dari Nol

Pelajaran 13 dari 15

Struct, error, dan goroutine

Error sebagai nilai

Setelah pelajaran ini kamu bisa membaca pola if err != nil, memprediksi pesan error dari strconv, errors.New, dan fmt.Errorf dengan %w, serta membedakan errors.Is dari perbandingan ==.

±13 menitDiperiksa 5 Okt 2026

Latihan di pelajaran ini butuh akun gratis. Progres, kode, dan catatanmu hanya tersimpan di browser ini. Masuk untuk menyimpannya

Materi

Go tidak memakai exception untuk kegagalan yang wajar terjadi, seperti teks yang bukan angka atau berkas yang tidak ada. Fungsi yang bisa gagal mengembalikan error sebagai nilai balik terakhir, dan pemanggil langsung memeriksanya dengan if err != nil. Error nil berarti berhasil. Saat gagal, nilai balik lainnya berisi nilai nol atau hasil sebagian, jadi nilai itu baru dipakai setelah err diperiksa.

error adalah interface dengan satu method, Error() string. errors.New("stok habis") membuat error sederhana. fmt.Errorf membuat error dengan pesan terformat, dan kata kerja %w membungkus error lain di dalamnya sambil menambah konteks: fmt.Errorf("ambil %d: %w", n, ErrStokHabis). Error yang sudah dibungkus tidak lagi sama dengan aslinya bila dibandingkan dengan ==, tetapi errors.Is(err, ErrStokHabis) menelusuri bungkusnya dan memberi true.

package main

import (
	"fmt"
	"strconv"
)

func main() {
	n, err := strconv.Atoi("12a")
	if err != nil {
		fmt.Println("gagal:", err) // gagal: strconv.Atoi: parsing "12a": invalid syntax
		return
	}
	fmt.Println(n * 2)
}

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 1 dari 3

Apa yang dicetak program ini?

package main

import (
	"fmt"
	"strconv"
)

func main() {
	teks := "12a"
	n, err := strconv.Atoi(teks)
	if err != nil {
		fmt.Println("gagal:", err)
		return
	}
	fmt.Println("dua kali lipat:", n*2)
}
Pilih satu jawaban

Latihan 2 dari 3

Apa yang dicetak program ini?

package main

import (
	"errors"
	"fmt"
)

var ErrStokHabis = errors.New("stok habis")

func ambil(stok, n int) (int, error) {
	if n > stok {
		return stok, fmt.Errorf("ambil %d: %w", n, ErrStokHabis)
	}
	return stok - n, nil
}

func main() {
	sisa, err := ambil(3, 5)
	fmt.Println(sisa, err)
	fmt.Println(errors.Is(err, ErrStokHabis), err == ErrStokHabis)
}
Pilih satu jawaban

Latihan 3 dari 3

Apa yang dicetak program ini?

package main

import (
	"fmt"
	"strconv"
)

func main() {
	jumlah, _ := strconv.Atoi("tiga")
	fmt.Println(jumlah + 1)
}
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke