Interface Composition: Building Larger Interfaces
Interfeys kompozitsiyasi: kattaroq interfeyslar qurish
Xuddi struct'larni kichik struct'lardan kompozitsiya qilganingiz kabi (Composite Types kursi), interfeyslarni ham kichik interfeyslardan kompozitsiya qilish mumkin. Standart kutubxonada buning klassik namunasi bor: io.ReadWriter, io.Reader va io.Writerning kombinatsiyasi:
type Reader interface {
Read(p []byte) (n int, err error)
}
type Writer interface {
Write(p []byte) (n int, err error)
}
type ReadWriter interface {
Reader
Writer
}ReadWriterga mos kelish uchun tur ham Read, ham Write metodlariga ega bo'lishi kerak. Bu — Go Basics kursidagi toSlug darsida ko'rgan kompozitsiya g'oyasining aynan o'zi: kichik, aniq maqsadli qismlarni birlashtirib, kattaroq imkoniyat yaratasiz — faqat bu safar funksiyalar o'rniga interfeyslar bilan.
Kichik interfeyslar (bitta yoki ikkita metodli) katta, hamma narsani qamrab oluvchi interfeyslardan ko'ra afzalroq: ular chaqiruvchidan faqat kerakli narsani talab qiladi, va kerak bo'lganda ularni erkin birlashtirish mumkin.
>_ Exercise
Name() string metodiga ega Named interfeysi va Age() int metodiga ega Aged interfeysini aniqlang. So'ngra ikkalasini birlashtirgan Person interfeysini yarating (Named va Agedni ichiga kiritish orqali). Employee{FullName string, Years int} struct'ini yozib, unga Name() va Age() metodlarini qo'shing. Nihoyat, Greet(p Person) string funksiyasini yozing — u "Salom, <Name>! Siz <Age> yoshdasiz." qatorini qaytaradi.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Interfeyslarni struct'lar kabi kichik qismlardan kompozitsiya qilish mumkin: kattaroq interfeys ichiga kichik interfeyslarning nomini yozish — ularning barcha metodlarini meros qilib olish demakdir. Bu Go kodini kichik, aniq maqsadli interfeyslarga bo'lib, kerak bo'lganda ularni birlashtirishga undaydi.
$ go run main.go
Kodingizni ishga tushiring