GoDasturchi
Generic Interfaces

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:

example.go
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:

example.go
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.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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:

example.go
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:

example.go
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.

Hints (0/3)

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