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:
Stellen Sie sich zum Beispiel eine Funktion vor, die eine Schnittstelle benötigt:
func method(data interface{})
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) // ... }
Allerdings die statische Typisierung von Go Das System verhindert, dass zur Laufzeit eine Variable mit einem bestimmten Typ erstellt wird.
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!