go / beginner
Snippet
Interfaces und Polymorphismus
Interfaces definieren Verhalten durch Methodensets ohne sie zu implementieren. Typen implementieren Interfaces implizit durch Bereitstellen aller erforderlichen Methoden. Eine Variable eines Interface-Typs kann jeden Wert halten, dessen Typ das Interface erfüllt, was Polymorphismus ermöglicht.
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
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(s.Speak())s = Cat{}fmt.Println(s.Speak())animals := []Speaker{Dog{}, Cat{}}for _, animal := range animals {fmt.Printf("Says: %s\n", animal.Speak())}}
Erklärung
1
type Speaker interface { Speak() string }
Interface deklariert erforderliche Methode(n) ohne Implementierung
2
func (d Dog) Speak() string
Dog implementiert Speaker implizit durch Bereitstellen der Speak()-Methode
3
var s Speaker
Interface-Variable kann jeden konkreten Typ halten, der es erfüllt
4
animals := []Speaker{Dog{}, Cat{}}
Slice von Interface ermöglicht einheitliches Verarbeiten verschiedener Typen