Middle
Kuo skiriasi Go sąsaja nuo kitų programavimo kalbų sąsajų?
sobes.tech AI
Atsakymas iš AI
Pagrindinis Go sąsajų skirtumas yra tas, kad jie įgyvendinami implicit (neaiškiai).
Kituose kalbose (pvz., Java, C#) klasė turi aiškiai deklaruoti, kad ji įgyvendina tam tikrą sąsają (išraiškinta įgyvendinimas).
Go bet koks tipas automatiškai atitinka sąsają, jei jis įgyvendina visas šios sąsajos apibrėžtas funkcijas. Aiškus įgyvendinimo deklaravimas nereikalingas.
Pavyzdys (Go):
// Sąsajos apibrėžimas
type Reader interface {
Read(p []byte) (n int, err error)
}
// Struktūros apibrėžimas
type FileReader struct {
// ... laukai
}
// Read metodo įgyvendinimas FileReader struktūrai
func (fr FileReader) Read(p []byte) (n int, err error) {
// ... skaitymo logika
return 0, nil // pavyzdžiui, tuščias
}
// FileReader neaiškiai atitinka Reader sąsają,
// nes turi atitinkamą Read metodą.
Pavyzdys (Java - palyginimui):
// Sąsajos apibrėžimas
interface Reader {
int read(byte[] p);
}
// Klasės apibrėžimas
class FileReader implements Reader { // Aiški įgyvendinimo deklaracija
// ... laukai
@Override
public int read(byte[] p) {
// ... skaitymo logika
return 0; // pavyzdžiui, tuščias
}
}
Go pagrindiniai implicitinės įgyvendinimo privalumai:
- Sujungtas dizainas: leidžia naujoms bibliotekoms apibrėžti sąsajas, kurios gali būti patenkintos jau esamų tipų be jų modifikavimo.
- Lankstumas: palengvina bendrų funkcijų kūrimą, kurios veikia su skirtingais tipais, atitinkančiais tą patį sąsają.
- Be "implements" deklaracijos: sumažina boilerplate kodo kiekį.
- Žuvies tipizacija ("duck typing"): jei tipas atrodo kaip antis ir kvėpuoja kaip antis, tai yra antis. Šiuo atveju - jei tipas įgyvendina sąsajos metodus, jis gali būti naudojamas kaip ši sąsaja.