Können Sie die Typzusicherung in Go vermeiden?

Mary-Kate Olsen
Freigeben: 2024-11-14 21:06:02
Original
404 Leute haben es durchsucht

Can You Avoid Type Assertion in Go?

So vermeiden Sie Typzusicherungen in Go

In Go ist es üblich, mit Schnittstellen zu arbeiten, um Typen mit gemeinsamem Verhalten zu verarbeiten. Allerdings kann die häufige Überprüfung des Typs eines Schnittstellenwerts mithilfe von Typzusicherungen mühsam sein. Dies wirft die Frage auf:

Ist es möglich, eine Variable mit dem erforderlichen Typ anstelle der Typzusicherung zu erstellen?

Stellen Sie sich zum Beispiel eine Funktion vor, die eine Schnittstelle benötigt:

func method(data interface{})
Nach dem Login kopieren

Um auf Felder oder Methoden des konkreten Typs zuzugreifen, würde man normalerweise die Typzusicherung verwenden:

switch data.(type) {
case *Struct1:
    a := data.(*Struct1)
    // ...
case *Struct2:
    a := data.(*Struct2)
    // ...
}
Nach dem Login kopieren

Allerdings die statische Typisierung von Go Das System verhindert, dass zur Laufzeit eine Variable mit einem bestimmten Typ erstellt wird.

Alternative Lösungen

Abstrahierende Funktionalität:

Anstatt sich auf Typzusicherungen zu verlassen, erstellen Sie eine Schnittstelle, die die erforderliche Funktionalität definiert. Lassen Sie dann die konkreten Typen diese Schnittstelle implementieren. Weisen Sie den Schnittstellenwert einer Variablen dieses Typs zu, sodass keine Typzusicherungen erforderlich sind.

Reflexion verwenden:

In Fällen, in denen eine Abstraktion nicht möglich ist, kann eine Reflexion möglich sein wird verwendet, um über ihren Namen auf gemeinsame Felder zuzugreifen. Während diese Lösung eine dynamische Typverarbeitung ermöglicht, fehlen ihr Garantien zur Kompilierungszeit und sie kann Auswirkungen auf die Leistung haben.

Das obige ist der detaillierte Inhalt vonKönnen Sie die Typzusicherung in Go vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage