Go-Schnittstellen werden in der Go-Programmierung sehr häufig verwendet, insbesondere die Verwendung leerer Schnittstellen. Aufgrund der Schnittstellen wird die Go-Sprache äußerst leistungsfähig. Die Spalte Go-Sprach-Tutorial führt Sie in die Verwendung der Go-Schnittstelle ein.
Über das Konzept der Schnittstelle:
1. Eine Schnittstelle ist eine Sammlung von einer oder mehreren Methodensignaturen
2 Als bestimmter Typ muss bei allen Methodensignaturen der Schnittstelle nicht angegeben werden, welche Schnittstelle als implementiert deklariert wird
3 Methodendeklarationen, keine Implementierung und keine Datenstrukturfelder
4 Schnittstellen können anonym in andere Schnittstellen oder in Schnittstellen eingebettet werden
5 wird auftreten, und die Schnittstelle speichert einen Zeiger auf die Kopie, d 🎜>7. Schnittstellen können auch Polymorphismus ähnlich wie OOP implementieren
8 Die leere Schnittstelle kann als Container für jede Art von Daten verwendet werden
Lassen Sie uns nun die grundlegendste Schnittstelle vorstellen. Stellen Sie Konzept 2 vor
package main import ( "fmt" ) type USB interface { // 定义一个USB接口 ,该接口拥有PhoneConnect的所有方法签名, Name() string //即就实现了PhoneConnect的接口,无需在声明。这就是上面说的第2条 Connect() } type PhoneConnect struct { //定义的结构体 name string } func (pc PhoneConnect) Name() string{ //上面结构体的方法 return pc.name } func (pc PhoneConnect) Connect(){ fmt.Println("Connectd to: ",pc.name) } func main(){ var a USB //声明该接口 a = PhoneConnect{"IPhone"} //该接口已经支持PhoneConnect这个结构体了。初始化该结构体 a.Connect() //调用该结构体的Connect方法 }
Wenn Sie das obige Beispiel verstehen, dann lesen Sie weiter.
Definieren Sie eine weitere Funktion zum Empfangen von Parametern vom USB-Typ. Übergeben Sie a in. Tatsächlich kann a bereits alle Methoden von phoneConnect aufrufen. Und zu diesem Zeitpunkt habe ich die Aussage etwas vage gemacht.
func Disconnect(usb USB){ fmt.Println("Discounnectd from:",usb.Name()) } func main(){ a := PhoneConnect{"IPhone"} //a是什么类型呢? fmt.Println("type:",reflect.TypeOf(a)) Disconnect(a) }
Sehen Sie sich die laufenden Ergebnisse an:
type: main.PhoneConnectDiscounnected from: IPhone
a ist eine instanziierte PhoneConnect-Typstruktur , aber die Trennfunktion erfordert den Empfang von Daten vom Typ USB, eine kann übergeben werden! ! !
Werfen wir einen Blick auf Konzept 7:
type USB interface { // 定义一个USB接口 ,该接口拥有PhoneConnect的所有方法签名, Name() string // Connect //嵌入了一个Connect接口,效果和最开始演示的是一样的 } type Connect interface { Connect() }
Dann kann jede Struktur, die die Methoden Name() und Connect() erfüllt, als USB betrachtet werden. Stimmt etwas nicht? Was passiert, wenn der USB-Stick, den ich an die DisConnect()-Funktion übergebe, kein Mobiltelefon ist? ? Verwenden Sie einfach ein Ok-Muster. Ich füge zum Beispiel eine TV-Struktur hinzu, und der Fernseher verfügt auch über eine USB-Schnittstelle.
type TVConnect struct { name string } func (tc TVConnect) Name() string{ return tc.name } func (tc TVConnect) Connect() { fmt.Println("Connect to: ",tc.name) } func Disconnect(usb USB){ if rs,ok := usb.(PhoneConnect);ok{ fmt.Println("Disconnect: ",rs.name) }else{ fmt.Println("Unknown device: ") } } func main(){ a := PhoneConnect{"IPhone"} b := TVConnect{"ChuangWei"} Disconnect(a) Disconnect(b) }
Sehen Sie sich das gedruckte Ergebnis an:
Verbindung trennen: IPhoneUnbekanntes Gerät:
Wieder fortgeschritten. Da Sie in der Disconnect-Funktion die Struktur der eingehenden Daten bestimmen können, müssen Sie sich keine Gedanken mehr über den Typ der USB-Schnittstelle machen. Definieren Sie es direkt als leere Schnittstelle. Ansonsten ist es vorbei. Ich versuche jedenfalls herauszufinden, welcher Typ Sie in der Funktion sind.
b ist eine USB-Schnittstelle von Skyworth TV , aber b wird in der Trennfunktion nicht erkannt, da es sich um einen Fernseher handelt.
func Disconnect(usb interface{}){ //注意,这里是空接口 switch v:=usb.(type) { case PhoneConnect: fmt.Println(" Phone device Disconnected from",v.name) case TVConnect: fmt.Println("TV device Disconnected from",v.name) default: fmt.Println("Unknown device ...") } } func main(){ a := PhoneConnect{"IPhone"} b := TVConnect{"ChuangWei"} Disconnect(a) Disconnect(b) }
Sehen Sie sich die Drucksituation an:
Telefongerät: Vom IPhone getrenntTV-Gerät: Von ChuangWei getrennt
auf der chinesischen PHP-Website.
Mehr Für Go-Sprachkenntnisse beachten Sie bitte die Spalte
Go Language Tutorial
Das obige ist der detaillierte Inhalt vonEinführung in die Verwendung der Go-Schnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!