Don't Panic in Libraries
Kutubxonalarda panic ishlatmang
panic — Go'da "favqulodda holat", dasturni darhol to'xtatadi. Qoidasi: kutubxona kodi (boshqalar chaqiradigan funksiyalar) panic chaqirmasligi, buning o'rniga har doim error qaytarishi kerak.
package main
import (
"errors"
"fmt"
)
// Yomon: kutubxona funksiyasi panic qiladi — chaqiruvchiga tanlov qoldirmaydi
func divideOldBad(a, b int) int {
if b == 0 {
panic("nolga bo'lish mumkin emas")
}
return a / b
}
// Yaxshi: xatoni qaytaradi, chaqiruvchi o'zi qaror qiladi
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("nolga bo'lish mumkin emas")
}
return a / b, nil
}
func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println("xato:", err)
return
}
fmt.Println(result)
}Nega bu muhim? panic chaqiruvchiga hech qanday tanlov qoldirmaydi — dastur to'xtaydi (agar kimdir recover() bilan ushlab qolmasa). error qaytarilsa esa, chaqiruvchi o'zi qaror qiladi: xatoni ko'rsatishmi, standart qiymat ishlatishmi, qayta urinib ko'rishmi. panic faqat haqiqatan tiklab bo'lmaydigan holatlar uchun qoldiriladi — masalan dastur ishga tushishida noto'g'ri sozlangan konfiguratsiya (log.Fatalga o'xshab).
>_ Exercise
panic o'rniga error qaytaring.
- •safeSqrt(n float64) (float64, error) yozing: n manfiy bo'lsa xato qaytarsin (panic emas)
- •math.Sqrt bilan natijani hisoblang
- •ikkita holat (musbat va manfiy) uchun chaqirib natijalarni chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Kutubxona kodi panic emas, error qaytarishi kerak — bu chaqiruvchiga vaziyatni o'zi hal qilish imkonini beradi.
NEXT UP
Error Message Style
$ go run main.go
Kodingizni ishga tushiring