Bei der Arbeit mit Schnittstellen in Go kann es manchmal erforderlich sein, den Typ des zugrunde liegenden Werts zu bestimmen. Hier kommt das Reflect-Paket ins Spiel. Mit der Funktion „reflect.TypeOf()“ kann der Typ eines Schnittstellenwerts ermittelt werden. Allerdings erfordert die Typzusicherung einen bestimmten Typ, nicht nur ein Type-Objekt.
Im bereitgestellten Code wird versucht, eine Typzusicherung für das Ergebnis von „reflect.TypeOf(“ durchzuführen. i):
item2 := i.(reflect.TypeOf(i)) // reflect.TypeOf(i) is not a type
Diese Zeile schlägt fehl, weil „reflect.TypeOf(i)“ ein Type-Objekt zurückgibt, nicht einen bestimmten Typ, der für den Typ verwendet werden kann Behauptung.
Es gibt mehrere Möglichkeiten, dieses Szenario anzugehen. Eine Möglichkeit besteht darin, einen Typschalter für den Schnittstellenwert selbst zu verwenden, wie in der Antwort vorgeschlagen:
switch x.(type){ case int: dosomething() }
Dieser Ansatz überprüft den Typ des in der Schnittstelle gespeicherten Werts und führt entsprechende Aktionen aus. Es ist keine Typreflexion erforderlich.
Wenn Sie alternativ speziell auf den Typ von Attributen innerhalb der Schnittstelle zugreifen und diesen aktivieren müssen, können Sie den folgenden Ansatz verwenden:
s := reflect.ValueOf(x) for i:=0; i<s.NumValues; i++{ switch s.Field(i).Interface().(type){ case int: dosomething() } }
Dies beinhaltet Durchlaufen der Felder der Schnittstelle, Abrufen ihrer Werte und Durchführen einer Typprüfung dieser Werte.
Dieser Ansatz ist zwar nicht so prägnant wie die Verwendung eines Typschalters an der Schnittstelle Wert selbst ermöglicht es mehr Flexibilität bei der Handhabung verschiedener Arten von Attributen innerhalb der Schnittstelle.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Typzusicherung mit „reflect.TypeOf()' in Go durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!