Junior
Čo sú rozhrania v jazyku Go?
sobes.tech AI
Odpoveď od AI
Rozhranie v jazyku Go je zbierka podpisov metód. Určuje správanie objektu: čo "vie robiť". Rozhranie neobsahuje údaje ani implementácie metód.
Kľúčové vlastnosti:
- Nepriama implementácia: Typ implementuje rozhranie nepriame, ak poskytne všetky metódy deklarované v rozhraní. Nie je potrebné explicitne deklarovať, že typ rozhranie implementuje.
- "Typovanie kačice" (Duck Typing): "Ak kváka ako kačica a chodí ako kačica, tak je to kačica". V Go nie je dôležitý typ objektu, ale či implementuje požadovaný súbor metód.
- Nulová hodnota: Nulová hodnota rozhrania je
nil. Hodnota rozhrania môže byťnil, ak sú typ aj hodnota v ňomnil. - Prázdne rozhranie (
interface{}aleboany): Môže obsahovať hodnotu akéhokoľvek typu. Často sa používa na prácu s dátami neznámeho typu alebo v univerzálnych kontajneroch.
Príklad definície a použitia:
// Definujeme rozhranie Greeter
type Greeter interface {
Greet() string // Metóda Greet, ktorá vracia reťazec
}
// Definujeme typ Person
type Person struct {
Name string
}
// Person implementuje rozhranie Greeter, poskytujúc metódu Greet
func (p Person) Greet() string {
return "Ahoj, " + p.Name
}
// Definujeme typ Robot
type Robot struct {
Model string
}
// Robot tiež implementuje rozhranie Greeter
func (r Robot) Greet() string {
return "Ahoj, model " + r.Model
}
// Funkcia prijíma rozhranie Greeter
func SayHello(g Greeter) {
fmt.Println(g.Greet()) // Voláme metódu Greet cez rozhranie
}
func main() {
person := Person{Name: "Alicia"}
robot := Robot{Model: "RX-800"}
SayHello(person) // Odovzdávame Person, ktorý implementuje Greeter
SayHello(robot) // Odovzdávame Robot, ktorý implementuje Greeter
}
Rozhrania podporujú flexibilný a odpojený dizajn, umožňujú písanie funkcií, ktoré pracujú s rôznymi typmi dát, pokiaľ tieto typy implementujú požadované rozhranie. Používajú sa na vytváranie všeobecného kódu a v štandardnej knižnici Go (napríklad io.Reader, io.Writer, fmt.Stringer).