Middle
Go interfeysining boshqa dasturlash tillaridagi interfeyslaridan qanday farqi bor?
sobes.tech AI
AIdan javob
Go interfeyslarining asosiy farqi shundaki, ular implicit (noaniq) tarzda amalga oshiriladi.
Boshqa tillarda (masalan, Java, C#), sinf aniq ravishda ma'lum bir interfeysni amalga oshirayotganligini e'lon qilishi kerak (aniq amalga oshirish).
Go'da, har qanday tur, agar u bu interfeysda belgilangan barcha metodlarni amalga oshirsa, avtomatik ravishda bu interfeysni qanoatlantiradi. Aniq amalga oshirish e'lon qilish shart emas.
Misol (Go):
// Interfeysni aniqlash
type Reader interface {
Read(p []byte) (n int, err error)
}
// Tuzilmani aniqlash
type FileReader struct {
// ... maydonlar
}
// FileReader uchun Read metodini amalga oshirish
func (fr FileReader) Read(p []byte) (n int, err error) {
// ... o'qish logikasi
return 0, nil // misol uchun joy egallovchi
}
// FileReader, Read metodiga ega bo'lgani uchun, implicit ravishda, bu interfeysni qanoatlantiradi.
Misol (Java - taqqoslash uchun):
// Interfeysni aniqlash
interface Reader {
int read(byte[] p);
}
// Sinfni aniqlash
class FileReader implements Reader { // Aniq amalga oshirish
// ... maydonlar
@Override
public int read(byte[] p) {
// ... o'qish logikasi
return 0; // misol uchun joy egallovchi
}
}
Go'da implicit amalga oshirishning asosiy afzallari:
- Ajratilgan dizayn: Yangi kutubxonalar mavjud turlar tomonidan bajarilishi mumkin bo'lgan interfeyslarni aniqlash imkonini beradi, ularni o'zgartirmasdan.
- Moslashuvchanlik: Turli turlar bilan ishlaydigan umumiy funksiyalarni yaratishni osonlashtiradi.
- "implements" talab qilinmaydi: Boilerplate kodni kamaytiradi.
- Ducky typing ("qush tipini"): Agar tur qushga o'xshash va quvquvchi bo'lsa, u qush. Bu holda, agar tur interfeys metodlarini amalga oshirsa, u bu interfeys sifatida ishlatilishi mumkin.