Handle Errors Once
Xatoni faqat bir marta boshqaring
Keng tarqalgan xato: bitta xatoni ham logga yozib, ham qaytarib, ham yana logga yozib — bitta muammo haqida bir necha marta "shovqin" ko'tarish. Yaxshi amaliyot: har bir xatoni faqat bir joyda hal qiling.
package main
import "fmt"
// Yomon: xato ham chop etiladi, ham qaytariladi — yuqorida yana chop etilsa, ikki marta ko'rinadi
func processOld(n int) (int, error) {
if n < 0 {
fmt.Println("xato: manfiy son") // BU YERDA chop etmang!
return 0, fmt.Errorf("manfiy son: %d", n)
}
return n * 2, nil
}
// Yaxshi: faqat qaytaradi, kim chaqirsa o'sha hal qiladi
func process(n int) (int, error) {
if n < 0 {
return 0, fmt.Errorf("manfiy son: %d", n)
}
return n * 2, nil
}
func main() {
result, err := process(-5)
if err != nil {
fmt.Println("xato:", err) // xato FAQAT shu yerda, bir marta ko'rsatiladi
return
}
fmt.Println(result)
}Qoida sodda: agar funksiya xatoni qaytarsa, uni o'sha yerda logga yozmang — buni chaqiruvchiga qoldiring. Faqat chaqiruv zanjirining eng tepasida, xato haqiqatan "tugagan" joyda (masalan foydalanuvchiga ko'rsatilganda yoki logga yozilganda) uni bir marta ko'rsating. Aks holda bitta xato dastur logida o'nlab marta takrorlanib chiqishi mumkin.
>_ Exercise
Xatoni faqat bir joyda boshqaring.
- •parseAge(s string) (int, error) yozing: strconv.Atoi ishlatib, xatoni faqat qaytaring (chop etmang)
- •main'da xatoni qabul qilib, faqat shu yerda "xato: ..." deb bir marta chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Har bir xatoni faqat bitta joyda hal qiling — funksiya ichida ham chop etib, ham qaytarish, keyinchalik bitta xatoning bir necha marta ko'rinishiga olib keladi.
NEXT UP
Sentinel Errors
$ go run main.go
Kodingizni ishga tushiring