Lassen Sie uns über die Benutzeroberfläche von Go sprechen | Themenmonat Go

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() stringMethode errorohne 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.ifaceStellt eine Schnittstelle mit einer Reihe von Methoden dar
  • runtime.efaceStellt eine Schnittstelle dar interface{}, die keine Methoden enthält

Beachten Sie, dass interface{}Typen keine willkürlichen Typen darstellen.

Ich denke du magst

Origin juejin.im/post/6945476531439271972
Empfohlen
Rangfolge