Heim  >  Artikel  >  Backend-Entwicklung  >  Golang-Schnittstellenübertragung

Golang-Schnittstellenübertragung

WBOY
WBOYOriginal
2023-05-19 10:08:07549Durchsuche

Implementierungsprinzip des Typs

Golang bietet als statisch typisierte Sprache eine sehr leistungsstarke Funktion – eine Schnittstelle. Dies hilft Entwicklern nicht nur bei der Wiederverwendbarkeit von Code, sondern ermöglicht uns auch, die Programmfunktionalität zu erweitern, ohne die Codestruktur zu zerstören.

In Golang ist eine Schnittstelle ein Typ, aber im Gegensatz zu anderen Typen kann ein Schnittstellentyp eine Reihe von Methodendeklarationen enthalten, ohne diese Methoden zu implementieren. Das gibt uns große Flexibilität. Durch die Definition eines Schnittstellentyps können wir eine allgemeine Methode zum Aufrufen einer Methode definieren. Diese aufrufende Methode ist dem Schnittstellentyp zugeordnet und hat nichts mit dem Implementierungstyp zu tun.

Wenn wir also den Schnittstellentyp verwenden, wie konvertiert Golang ihn in den Implementierungstyp? Bevor wir dieses grundlegende Implementierungsprinzip verstehen, wollen wir zunächst die Grundkonzepte von Typen und Schnittstellentypen in Golang verstehen.

Typen und Schnittstellentypen in Golang

Typen in Golang können in zwei Kategorien unterteilt werden: Werttypen und Referenztypen.

  • Werttyp: numerischer Typ, boolescher Typ, Array-Typ, Strukturtyp usw.
  • Referenztypen: Zeigertyp, Slice-Typ, Kartentyp, Kanaltyp usw.

Der Werttyp bedeutet, dass die Variable direkt im Speicher gespeichert wird, während der Referenztyp bedeutet, dass die Variable Zeiger auf andere Objekte im Speicher speichert. Bei Werttypen können sie direkt verglichen werden, während bei Referenztypen der Vergleich mithilfe einer Äquivalenzfunktion erfolgen muss.

In Golang können wir Schnittstellentypen verwenden, um alle Typen darzustellen. Die Schnittstelle ist ein sehr flexibler Typ, da sie jede Art von Datenwert darstellen kann. Ein Schnittstellenwert kann alle Daten speichern, die den Wert der Schnittstelle implementieren. Daher können Schnittstellentypen verwendet werden, um beliebige Datentypen an Funktionen zu übergeben oder Objektdaten zu speichern, ohne den spezifischen Objekttyp zu kennen.

Die Beziehung zwischen Typen und Schnittstellentypen

In Golang kann ein Typ eine oder mehrere Schnittstellen implementieren. Ein Typ, der alle Methoden in einer Schnittstelle implementiert, wird als Instanziierung der Schnittstelle betrachtet. Dieser Typ kann als Variablentyp verwendet werden, der diese Schnittstelle implementiert.

Zum Beispiel haben wir einen Schnittstellentyp namens Shaper, der eine Methode namens Area() hat:

Typ Shaper-Schnittstelle {

Area() float64

}

Wir können einen Square-Typ erstellen, sodass er die Shaper-Schnittstelle Area() implementiert Methode:

type Square struct {

side float64

}

func (s *Square) Area() float64 {

return s.side * s.side

}

Auf diese Weise können wir den Square-Typ zu einer Instanz des Shaper-Typs machen. Wenn wir die Fläche vom Typ „Square“ berechnen möchten, können wir die Methode „Area()“ vom Typ „Shaper“ verwenden, um den Flächenwert zu erhalten:

func main() {

square := &Square{10.0}
fmt.Println("Area of square:", square.Area())

}

Hier können wir sehen dass der Square-Typ in der Area()-Methode des Shaper-Typs implementiert ist, sodass er als Instanz des Shaper-Typs verwendet werden kann. Der Schnittstellentyp kann hier eine allgemeine Area()-Methode zur Berechnung verschiedener Flächentypen bereitstellen, und die Implementierung dieser Area()-Methode wird durch den Implementierungstyp bestimmt.

Warum werden Typzusicherungen benötigt?

Da wir nun die Grundlagen von Typen und Schnittstellentypen verstanden haben, werfen wir einen Blick darauf, wie Golang Schnittstellentypen in Implementierungstypen umwandelt.

Wenn wir eine Variable vom Schnittstellentyp erstellen, handelt es sich tatsächlich um eine Datenstruktur, die aus zwei Teilen besteht: einem Zeiger auf die Methodentabelle (Methodentabelle, auch als virtuelle Tabelle oder Vtable bezeichnet) und einem Zeiger auf den Wert, der den Schnittstellenzeiger implementiert . Die Methodentabelle ist eine Liste aller Methodenfunktionszeiger. Jeder Zeiger ist einem Methodennamen und einem Typ zugeordnet.

Wenn wir eine Methode eines Schnittstellentyps aufrufen, prüft Golang zunächst, ob sich die Methode in der Methodentabelle befindet, und ruft dann die entsprechende Methode auf. Normalerweise verwendet Golang Zeigerempfänger, um Schnittstellentypen zu implementieren, da diese Methode effizienter als Wertempfänger ist und verhindern kann, dass der Aufrufer die Felder des Werttyps ändert.

Aber manchmal, wenn wir einen Schnittstellentyp verwenden, müssen wir ihn in einen Implementierungstyp konvertieren. In diesem Fall müssen wir Typzusicherungen verwenden. Die Typzusicherung ist eine Operation, die bestimmt, ob eine Typkonvertierung möglich ist, indem beurteilt wird, ob der Schnittstellentyp den Zieltyp implementiert. Wenn die Beurteilung erfolgreich ist, gibt die Typzusicherung einen Wert zurück, der den Zieltyp darstellt. Andernfalls wird ein Nullwert zurückgegeben und eine Ausnahme ausgelöst. Bevor wir Typzusicherungen vornehmen, müssen wir daher den zweiten Rückgabewert in der Typzusicherung verwenden, um sichere Entscheidungen zu treffen und Ausnahmen zu verhindern.

Der folgende Code zeigt, wie man einen Schnittstellentyp in einen Implementierungstyp umwandelt:

func main() {

var shaper Shaper
square := &Square{10.0}
shaper = square                //将square类型转换成Shaper类型
s := shaper.(*Square)          //将shaper类型转换成Square类型
fmt.Println("Square side length:", s.side)

}

Hier erhalten wir durch Zuweisen eines Werts vom Typ Square zu einer Variablen vom Typ Shaper den Typ Square wird in den Shaper-Typ konvertiert. Wenn wir es zurückkonvertieren müssen, können wir die Typzusicherung verwenden, um den Shaper-Typ in den Square-Typ zu konvertieren.

Zusammenfassung

Der Schnittstellentyp ist ein sehr wichtiges Konzept in Golang, das die Wiederverwendbarkeit und Skalierbarkeit von Code verbessern kann. In Golang können wir mithilfe von Schnittstellentypen und Typzusicherungen Schnittstellentypen in Implementierungstypen konvertieren. Obwohl Typzusicherungen eine größere Flexibilität bieten, müssen Sie bei der Verwendung auf die Sicherheit der Typkonvertierung achten, um Ausnahmen zu vermeiden.

Das obige ist der detaillierte Inhalt vonGolang-Schnittstellenübertragung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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
Vorheriger Artikel:Golang braucht nur KörperNächster Artikel:Golang braucht nur Körper