capypad
0 Tage Serie
go / intermediate
Snippet

Implizite Interface-Implementierung

In Go werden Interfaces implizit implementiert. Ein Typ erfüllt ein Interface, indem er einfach dessen Methoden implementiert; es gibt kein Schlüsselwort 'implements'. Dies entkoppelt die Definition des Interfaces von seiner Implementierung.

snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main
 
import "fmt"
 
type Describer interface {
Describe() string
}
 
type Product struct {
Name string
Price float64
}
 
func (p Product) Describe() string {
return fmt.Sprintf("%s costs $%.2f", p.Name, p.Price)
}
 
func main() {
var d Describer = Product{Name: "Keyboard", Price: 49.99}
fmt.Println(d.Describe())
}
Erklärung
1
type Describer interface { ... }
Definiert ein Interface mit einer Describe-Methode, die einen String zurückgibt.
2
func (p Product) Describe() string
Das Product-Struct implementiert die Describe-Methode und erfüllt damit das Describer-Interface.
3
var d Describer = Product{...}
Eine Product-Instanz kann einer Describer-Variablen zugewiesen werden, da sie das Interface erfüllt.