Type Assertions: Safe Value Extraction
Type assertion: qiymatni xavfsiz ajratib olish
any qiymat ichida qaysi tur yashiringanini bilish uchun type assertion ishlatiladi. Ikki xil ko'rinishi bor — biri xavfli, biri xavfsiz:
var x any = 42
n := x.(int) // xavfli: agar x int bo'lmasa, panic!
n, ok := x.(int) // xavfsiz: ok == false, panic yo'qBu — Errors Are Values darsida ko'rgan value, ok := m[key] andazasining aynan o'zi, faqat map o'rniga interfeys bilan. ok — muvaffaqiyat belgisi: agar x haqiqatan ham int bo'lsa, ok — true va n — ajratilgan qiymat; aks holda ok — false va n — int uchun nol qiymat (0).
Ikki qiymatli shakl har doim afzalroq, chunki u dasturni to'xtatib qo'yadigan panicdan saqlaydi — ishonchsiz manbadan (masalan, foydalanuvchi kiritgan any slice'idan) kelayotgan ma'lumot bilan ishlaganda bu juda muhim.
>_ Exercise
SumInts(items []any) int funksiyasini yozing. U slice ustidan aylanib, ikki qiymatli type assertion (item.(int)) yordamida faqat int turidagi elementlarni aniqlaydi va ularning yig'indisini qaytaradi — boshqa turdagi elementlarni (masalan, string, float64) e'tiborsiz qoldiring, panic bo'lmasligi kerak.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Ikki qiymatli type assertion (v, ok := x.(T)) — any ichidan qiymatni xavfsiz ajratib olishning standart usuli. okni har doim tekshiring; aks holda kutilmagan tur dasturni panic bilan to'xtatib qo'yishi mumkin.
NEXT UP
Interface Composition: Building Larger Interfaces
$ go run main.go
Kodingizni ishga tushiring