GoDasturchi
Type Constraints and the any Keyword

Type Constraints and the any Keyword

Tur cheklovlari va any kalit so'zi

any — eng keng cheklov: mutlaqo har qanday tur mos keladi. Lekin ba'zida funksiyangiz ma'lum amallarni (masalan, + bilan qo'shishni) talab qiladi, va any bunga imkon bermaydi — Go any turidagi ikkita qiymatni qo'shishga ruxsat bermaydi, chunki ular umuman qo'shilishi mumkin bo'lgan turmi ekanini bilmaydi.

Yechim — maxsus cheklov interfeysi: ruxsat etilgan turlarni | bilan sanab o'tadigan interfeys.

example.go
type Number interface {
    int | float64
}

func Sum[T Number](nums []T) T {
    var total T
    for _, n := range nums {
        total += n
    }
    return total
}

Endi Sum faqat Number ro'yxatidagi turlar bilan chaqirilishi mumkin, va funksiya ichida += ishlatish xavfsiz — Go har ikkala tur ham qo'shish amalini qo'llab-quvvatlashini biladi. var total TT qanday tur bo'lishidan qat'i nazar uning nol qiymatini oladi (int uchun 0, float64 uchun 0.0). Demak, any va maxsus cheklov orasidagi farq shu: any "hech qanday amalga ruxsat yo'q" desa, Number "faqat shu ro'yxatdagi turlarga, va ular ustida + ishlatishga ruxsat bor" deydi.

>_ Exercise

int va float64 turlarini o'z ichiga olgan Number cheklov interfeysini aniqlang. So'ngra Sum[T Number](nums []T) T funksiyasini yozing — u slice elementlarining yig'indisini qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Maxsus cheklov interfeysi (type Number interface { int | float64 }) generic funksiya ichida qaysi amallar (masalan, +) xavfsiz ekanini Go'ga aytadi. any eng keng, lekin eng "kambag'al" cheklov — hech qanday amalga ruxsat bermaydi.

NEXT UP

The comparable Constraint

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Type Constraints and the any Keyword

Tur cheklovlari va any kalit so'zi

any — eng keng cheklov: mutlaqo har qanday tur mos keladi. Lekin ba'zida funksiyangiz ma'lum amallarni (masalan, + bilan qo'shishni) talab qiladi, va any bunga imkon bermaydi — Go any turidagi ikkita qiymatni qo'shishga ruxsat bermaydi, chunki ular umuman qo'shilishi mumkin bo'lgan turmi ekanini bilmaydi.

Yechim — maxsus cheklov interfeysi: ruxsat etilgan turlarni | bilan sanab o'tadigan interfeys.

example.go
type Number interface {
    int | float64
}

func Sum[T Number](nums []T) T {
    var total T
    for _, n := range nums {
        total += n
    }
    return total
}

Endi Sum faqat Number ro'yxatidagi turlar bilan chaqirilishi mumkin, va funksiya ichida += ishlatish xavfsiz — Go har ikkala tur ham qo'shish amalini qo'llab-quvvatlashini biladi. var total TT qanday tur bo'lishidan qat'i nazar uning nol qiymatini oladi (int uchun 0, float64 uchun 0.0). Demak, any va maxsus cheklov orasidagi farq shu: any "hech qanday amalga ruxsat yo'q" desa, Number "faqat shu ro'yxatdagi turlarga, va ular ustida + ishlatishga ruxsat bor" deydi.

>_ Exercise

int va float64 turlarini o'z ichiga olgan Number cheklov interfeysini aniqlang. So'ngra Sum[T Number](nums []T) T funksiyasini yozing — u slice elementlarining yig'indisini qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Maxsus cheklov interfeysi (type Number interface { int | float64 }) generic funksiya ichida qaysi amallar (masalan, +) xavfsiz ekanini Go'ga aytadi. any eng keng, lekin eng "kambag'al" cheklov — hech qanday amalga ruxsat bermaydi.

NEXT UP

The comparable Constraint