GoDasturchi
Add Context to Errors

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.

example.go
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.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

example.go
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.

Hints (0/3)

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