Sentinel Errors
Sentinel xatolar
"Sentinel xato" — oldindan e'lon qilingan, nomlangan xato qiymati (masalan io.EOF, sql.ErrNoRows). Ular "aynan shu xolat yuz berdimi?" deb aniq tekshirish uchun ishlatiladi.
package main
import (
"errors"
"fmt"
)
var (
ErrOutOfStock = errors.New("mahsulot tugagan")
ErrInvalidCode = errors.New("noto'g'ri kod")
)
func checkStock(code string, qty int) error {
if code != "OK" {
return ErrInvalidCode
}
if qty <= 0 {
return ErrOutOfStock
}
return nil
}
func main() {
err := checkStock("OK", 0)
switch {
case errors.Is(err, ErrOutOfStock):
fmt.Println("ombordan tugagan, keyinroq urinib ko'ring")
case errors.Is(err, ErrInvalidCode):
fmt.Println("kodni tekshiring")
case err == nil:
fmt.Println("hammasi joyida")
}
}Sentinel xatolar var sifatida paket darajasida e'lon qilinadi (odatda Err prefiksi bilan: ErrNotFound, ErrOutOfStock). Ular chaqiruvchiga aniq qaysi holat yuz berganini errors.Is (yoki oddiy ==, agar o'ralmagan bo'lsa) bilan tekshirish va har biriga mos harakat qilish imkonini beradi — shunchaki "xato bor/yo'q"dan ko'ra ancha aniqroq.
>_ Exercise
Ikkita sentinel xatoni farqlab, mos xabar chiqaring.
- •ErrExpired va ErrRevoked sentinel xatolarini e'lon qiling
- •checkToken(status string) error: "expired" bo'lsa ErrExpired, "revoked" bo'lsa ErrRevoked, aks holda nil
- •errors.Is bilan har biriga mos xabar chiqaring
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Sentinel xatolar (ErrXxx) — muayyan xato holatlarini nomlash va ularni errors.Is bilan aniq tekshirish imkonini beradi.
NEXT UP
Custom Error Types
$ go run main.go
Kodingizni ishga tushiring