GoDasturchi
Error Handling Basics

Error Handling Basics

Xatolarni boshqarish asoslari

Errors Are Values kursida siz errorni oddiy qiymat sifatida qaytarishni o'rgangansiz. Endi bir qadam chuqurroq: maxsus xato turlari. error — atigi bitta metodli interfeys (Error() string), shuning uchun istalgan turingiz shu metodga ega bo'lsa, u error bo'la oladi:

example.go
type NotFoundError struct {
    Name string
}

func (e *NotFoundError) Error() string {
    return fmt.Sprintf("%s not found", e.Name)
}

Bu Interfaces & Polymorphism kursidagi implicit interfeys amalga oshirish g'oyasining amaliy qo'llanilishi. Maxsus xato turining foydasi — unda qo'shimcha ma'lumot saqlash mumkin (bu yerda — Name). Buni qayta olish uchun errors.As ishlatiladi:

example.go
var notFound *NotFoundError
if errors.As(err, &notFound) {
    fmt.Println("missing:", notFound.Name)
}

errors.As — Go Generics kursidagi ikki qiymatli type assertion (v, ok := x.(T)) g'oyasining xatolar uchun versiyasi: err aslida *NotFoundError ekanligini tekshiradi va bo'lsa, uni notFoundga "quyadi", shunda uning Name maydoniga kirish mumkin bo'ladi.

>_ Exercise

Name string maydonli NotFoundError struct'ini yozing va unga Error() string metodini qo'shing — "<Name> not found" qaytarsin (pointer receiver bilan). FindUser(name string) error funksiyasini yozing — agar name "alice"ga teng bo'lmasa &NotFoundError{Name: name} qaytaradi, aks holda nil. mainda errors.As yordamida xatoni *NotFoundErrorga aylantirib, uning Nameini chop eting.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Maxsus xato turlari (Error() string metodiga ega struct'lar) oddiy matn xabaridan tashqari qo'shimcha, strukturaviy ma'lumot saqlashi mumkin. errors.As bu ma'lumotni xavfsiz qayta olish uchun standart vosita.

NEXT UP

iota and Const Patterns

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Error Handling Basics

Xatolarni boshqarish asoslari

Errors Are Values kursida siz errorni oddiy qiymat sifatida qaytarishni o'rgangansiz. Endi bir qadam chuqurroq: maxsus xato turlari. error — atigi bitta metodli interfeys (Error() string), shuning uchun istalgan turingiz shu metodga ega bo'lsa, u error bo'la oladi:

example.go
type NotFoundError struct {
    Name string
}

func (e *NotFoundError) Error() string {
    return fmt.Sprintf("%s not found", e.Name)
}

Bu Interfaces & Polymorphism kursidagi implicit interfeys amalga oshirish g'oyasining amaliy qo'llanilishi. Maxsus xato turining foydasi — unda qo'shimcha ma'lumot saqlash mumkin (bu yerda — Name). Buni qayta olish uchun errors.As ishlatiladi:

example.go
var notFound *NotFoundError
if errors.As(err, &notFound) {
    fmt.Println("missing:", notFound.Name)
}

errors.As — Go Generics kursidagi ikki qiymatli type assertion (v, ok := x.(T)) g'oyasining xatolar uchun versiyasi: err aslida *NotFoundError ekanligini tekshiradi va bo'lsa, uni notFoundga "quyadi", shunda uning Name maydoniga kirish mumkin bo'ladi.

>_ Exercise

Name string maydonli NotFoundError struct'ini yozing va unga Error() string metodini qo'shing — "<Name> not found" qaytarsin (pointer receiver bilan). FindUser(name string) error funksiyasini yozing — agar name "alice"ga teng bo'lmasa &NotFoundError{Name: name} qaytaradi, aks holda nil. mainda errors.As yordamida xatoni *NotFoundErrorga aylantirib, uning Nameini chop eting.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Maxsus xato turlari (Error() string metodiga ega struct'lar) oddiy matn xabaridan tashqari qo'shimcha, strukturaviy ma'lumot saqlashi mumkin. errors.As bu ma'lumotni xavfsiz qayta olish uchun standart vosita.

NEXT UP

iota and Const Patterns