Junior
Mi az interfész a Go nyelvben?
sobes.tech MI
Válasz az MI-től
A Go nyelvben a felület (interface) egy metódus aláírásokból álló gyűjtemény. Meghatározza egy objektum viselkedését: mit "képes csinálni". A felület nem tartalmaz adatokat vagy metódusmegvalósításokat.
Fő jellemzők:
- Implicit implementáció: Egy típus implicit módon implementálja a felületet, ha biztosítja az összes benne deklarált metódust. Nem szükséges explicit módon deklarálni, hogy a típus implementálja a felületet.
- "Kacsázás típus szerint" (Duck Typing): "Ha kacsázik, mint egy kacsa, és jár, mint egy kacsa, akkor az egy kacsa". Go-ban nem számít a típus, hanem az, hogy a típus implementálja-e a szükséges metódusokat.
- Null érték: A felület null értéke
nil. Egy felület értékenillehet, ha mind a típus, mind az érték bennenil. - Üres felület (
interface{}vagyany): Bármilyen típusú értéket tárolhat. Gyakran használják ismeretlen típusú adatokkal való munkához vagy általános tárolókban.
Példa definícióra és használatra:
// Definiáljuk a Greeter felületet
type Greeter interface {
Greet() string // Metódus, ami egy stringet ad vissza
}
// Definiálunk egy Person típust
type Person struct {
Name string
}
// A Person implementálja a Greeter felületet, a Greet metódusával
func (p Person) Greet() string {
return "Szia, " + p.Name
}
// Definiálunk egy Robot típust
type Robot struct {
Model string
}
// A Robot szintén implementálja a Greeter felületet
func (r Robot) Greet() string {
return "Helló, " + r.Model
}
// Egy függvény, ami egy Greeter-t vár
func SayHello(g Greeter) {
fmt.Println(g.Greet()) // A Greet metódus hívása az interfészen keresztül
}
func main() {
person := Person{Name: "Alicia"}
robot := Robot{Model: "RX-800"}
SayHello(person) // Person-t adunk át, ami implementálja a Greeter-t
SayHello(robot) // Robot-ot adunk át, ami implementálja a Greeter-t
}
A felületek (interface) támogatják a rugalmas és laza összekapcsolt tervezést, lehetővé téve olyan függvények írását, amelyek különböző típusú adatokkal működnek, amennyiben ezek a típusok implementálják a szükséges felületet. Ezeket általános kódok és a Go standard könyvtárában (pl. io.Reader, io.Writer, fmt.Stringer) használják.