Generic Interfaces
Generic interfeyslar
Interfaces & Polymorphism kursidagi interfeyslar ham tur parametriga ega bo'lishi mumkin. Bu "biror turni saqlaydigan va qaytaradigan har qanday narsa" kabi umumiy shartnomalarni yozish imkonini beradi:
type Container[T any] interface {
Get() T
Set(T)
}Container[T any] — "T turidagi qiymatni saqlaydigan va qaytaradigan har qanday tur" degan shartnoma. Bu interfeysga mos kelish uchun, generic struct'ingiz (masalan, Generic Types darsidagi Box[T]) mos metodlarga ega bo'lishi kerak — interfeys implicit amalga oshirilishi haqidagi qoida generics bilan ham o'zgarmaydi:
func Describe[T any](c Container[T]) T {
return c.Get()
}
// Container[int]ni qondiradigan har qanday tur bilan ishlaydi>_ Exercise
Get() T va Set(T) metodlariga ega Container[T any] generic interfeysini aniqlang. Berilgan Box[T any] struct'i (Get/Set metodlari bilan) Container[T]ga mos kelishini tekshiring. Describe[T any](c Container[T]) T funksiyasini yozing — u konteynerning joriy qiymatini qaytaradi.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Interfeyslar ham tur parametriga ega bo'lishi mumkin (Container[T any]). Bu Go'ning implicit interfeys amalga oshirish qoidasi bilan birlashib, generic struct'lar uchun umumiy, qayta ishlatiladigan shartnomalar yozish imkonini beradi.
NEXT UP
Type Inference in Practice
$ go run main.go
Kodingizni ishga tushiring