Add Context to Errors
Xatolarga kontekst qo'shish
Faqat "fayl topilmadi" degan xato kam ma'lumot beradi — qaysi fayl? Nima qilayotganda? Xatoni yuqoriga uzatishdan oldin unga kontekst qo'shish — qidiruvni ancha osonlashtiradi.
package main
import (
"errors"
"fmt"
)
var ErrNotFound = errors.New("topilmadi")
func findUser(id int) error {
if id != 1 {
return fmt.Errorf("findUser(%d): %w", id, ErrNotFound)
}
return nil
}
func main() {
err := findUser(42)
fmt.Println(err)
fmt.Println(errors.Is(err, ErrNotFound))
}fmt.Errorf("...%w", ..., err) — %w ("wrap", o'rash) belgisi asl xatoni o'rab, yangi, batafsilroq xato yaratadi. Bu shunchaki matn qo'shishdan (%vdan) farq qiladi: %w bilan o'ralgan xato hali ham "ichida" asl xatoni saqlaydi, uni errors.Is(err, ErrNotFound) bilan tekshirish mumkin — garchi tashqi ko'rinishi butunlay boshqa matn bo'lsa ham.
>_ Exercise
Faylni ochishda xatoga kontekst qo'shing.
- •openConfig(name string) funksiyasida ErrMissing xatosini "openConfig(<name>): %w" bilan o'rab qaytaring
- •natijani va errors.Is(err, ErrMissing) natijasini chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
fmt.Errorf bilan %w yordamida xatoga kontekst qo'shing — asl xato errors.Is orqali hali ham tekshirilishi mumkin bo'lib qoladi.
NEXT UP
Handle Errors Once
$ go run main.go
Kodingizni ishga tushiring