Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in die Verwendung der Go-Schnittstelle

Einführung in die Verwendung der Go-Schnittstelle

尚
nach vorne
2020-02-17 17:17:552743Durchsuche

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.

Einführung in die Verwendung der Go-Schnittstelle

Ü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.PhoneConnect

Discounnected 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: IPhone

Unbekanntes Gerät:


b ist eine USB-Schnittstelle von Skyworth TV , aber b wird in der Trennfunktion nicht erkannt, da es sich um einen Fernseher handelt.

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.
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 getrennt

TV-Gerät: Von ChuangWei getrennt


Mehr Für Go-Sprachkenntnisse beachten Sie bitte die Spalte
Go Language Tutorial

auf der chinesischen PHP-Website.

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen