Was ist eine Schnittstelle? Eine Schnittstelle ist eine Abstraktion, eine Sammlung nicht implementierter Methoden, die uns helfen kann, die spezifische Implementierung zu verbergen und eine Entkopplung zu erreichen.
In diesem Artikel geht es um Inhalte im Zusammenhang mit der Go-Oberfläche.
implizite Schnittstelle
Das Definieren einer Schnittstelle in der Go-Sprache erfordert die Verwendung des Interface-Schlüsselworts und kann nur Methoden definieren, keine Mitgliedsvariablen, zum Beispiel:
type error interface {
Error() string
}
复制代码
Wir können die Schnittstelle indirekt implementieren, indem wir die Error() string
Methode error
ohne die Schnittstelle explizit zu implementieren:
type RPCError struct {
Code int64
Message string
}
func (e *RPCError) Error() string {
return fmt.Sprintf("%s, code=%d", e.Message, e.Code)
}
复制代码
Strukturen und Zeiger
Wir können Strukturen oder Zeiger als Empfänger von Schnittstellenimplementierungen verwenden, aber diese beiden Typen sind nicht identisch, und beide Implementierungen können nicht gleichzeitig existieren.
type Cat struct {}
type Duck interface { ... }
func (c Cat) Quack {} // 使用结构体实现接口
func (c *Cat) Quack {} // 使用结构体指针实现接口
var d Duck = Cat{} // 使用结构体初始化变量
var d Duck = &Cat{} // 使用结构体指针初始化变量
复制代码
Hier tritt die durch den Strukturzeiger implementierte Schnittstelle auf.Wenn die Struktur verwendet wird, um die Variable zu initialisieren, kann die Kompilierung nicht passieren.
Zeigertyp
Es gibt zwei verschiedene Arten von Schnittstellen in Go
runtime.iface
Stellt eine Schnittstelle mit einer Reihe von Methoden darruntime.eface
Stellt eine Schnittstelle dar interface{}, die keine Methoden enthält
Beachten Sie, dass
interface{}
Typen keine willkürlichen Typen darstellen.