GoDasturchi
Type Assertions: Safe Value Extraction

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:

example.go
var x any = 42

n := x.(int)        // xavfli: agar x int bo'lmasa, panic!
n, ok := x.(int)     // xavfsiz: ok == false, panic yo'q

Bu — 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, oktrue va n — ajratilgan qiymat; aks holda okfalse va nint 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.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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:

example.go
var x any = 42

n := x.(int)        // xavfli: agar x int bo'lmasa, panic!
n, ok := x.(int)     // xavfsiz: ok == false, panic yo'q

Bu — 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, oktrue va n — ajratilgan qiymat; aks holda okfalse va nint 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.

Hints (0/3)

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