Einführung in die Verwendung der Go-Schnittstelle

Freigeben: 2020-02-17 17:17:55
nach vorne
2773 Leute haben es durchsucht

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方法
}
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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()
}
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
go
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage