Heim > Backend-Entwicklung > Golang > Wie kann ich eine Typzusicherung mit „reflect.TypeOf()' in Go durchführen?

Wie kann ich eine Typzusicherung mit „reflect.TypeOf()' in Go durchführen?

Susan Sarandon
Freigeben: 2024-12-20 10:40:10
Original
139 Leute haben es durchsucht

How Can I Perform Type Assertion Using `reflect.TypeOf()` in Go?

Typzusicherung mit Reflect.TypeOf() in Go

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.

Problem

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

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.

Lösung

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

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

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!

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