Sobes.tech
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:

  1. 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.
  2. "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.
  3. Nulová hodnota: Nulová hodnota rozhrania je nil. Hodnota rozhrania môže byť nil, ak sú typ aj hodnota v ňom nil.
  4. Prázdne rozhranie (interface{} alebo any): 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).