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.
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 T — T 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.
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
$ go run main.go
Kodingizni ishga tushiring