go / beginner
Snippet
Interfaces: Verhaltensverträge Definieren
Interfaces definieren einen Vertrag von Methoden, die ein Typ implementieren muss. Sie ermöglichen Polymorphie in Go und erlauben verschiedenen Typen, dieselbe Interface zu erfüllen. Wenn ein Typ alle Methoden einer Interface implementiert, erfüllt er diese implizit. Go ist duck-typed, das bedeutet, du musst nicht explizit deklarieren, dass ein Typ eine Interface implementiert. Dies macht den Code flexibel und testbar. Leere Interfaces (interface{}) können jeden Wert halten.
snippet.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package mainimport "fmt"type Speaker interface {Speak() string}type Dog struct{}func (d Dog) Speak() string {return "Woof!"}type Cat struct{}func (c Cat) Speak() string {return "Meow!"}func main() {var s Speakers = Dog{}fmt.Println("Dog says:", s.Speak())s = Cat{}fmt.Println("Cat says:", s.Speak())// Using a slice of interfacesspeakers := []Speaker{Dog{}, Cat{}}for _, speaker := range speakers {fmt.Println("Animal says:", speaker.Speak())}}
Erklärung
1
type Speaker interface { Speak() string }
Definiert ein Interface, das eine Speak()-Methode erfordert, die einen String zurückgibt
2
func (d Dog) Speak() string
Value-Receiver-Methode - Dog-Typ implementiert Speaker
3
var s Speaker
Deklariert eine Variable vom Interface-Typ, initial nil
4
speakers := []Speaker{Dog{}, Cat{}}
Slice vom Interface-Typ, das verschiedene konkrete Typen enthält