Heim > Backend-Entwicklung > Golang > Wie kann ich eine Typzusicherung für ein Go „reflect.TypeOf()'-Ergebnis durchführen?

Wie kann ich eine Typzusicherung für ein Go „reflect.TypeOf()'-Ergebnis durchführen?

Patricia Arquette
Freigeben: 2024-12-24 22:06:20
Original
336 Leute haben es durchsucht

How Can I Perform Type Assertion on a Go `reflect.TypeOf()` Result?

Typzusicherung unter Verwendung von „reflect.TypeOf()“ in Go

In Go kann es bei der Arbeit mit Schnittstellen erforderlich sein, eine Typzusicherung durchzuführen um den zugrunde liegenden konkreten Typ zu erhalten. Es stellt sich die Frage, wie ein Typ (der von „reflect.TypeOf()“ zurückgegeben wird) zur Behauptung in einen bestimmten Typ umgewandelt werden soll.

Problem:

Betrachten Sie den Beispielcode:

func IdentifyItemType(name string) interface{} {
    var item interface{}
    switch name {
    default:
        item = Article{}
    }
    return item
}
Nach dem Login kopieren

Hier wollen wir eine Struktur (Artikel) anhand eines Stringnamens identifizieren. Allerdings erfordert die Typzusicherung einen Typ, aber reflekt.TypeOf() gibt einen Typ zurück.

Lösung:

Wenn das Ziel darin besteht, den Typ des Äußeren einzuschalten Schnittstelle{}, Reflexion ist nicht erforderlich:

switch x.(type){
  case int: 
    dosomething()
}
Nach dem Login kopieren

Um jedoch den Typ der Attribute innerhalb einer Schnittstelle zu ändern, kann Reflexion sein eingesetzt:

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 ermöglicht das Umschalten von Typen auf den Attributen der Schnittstelle. Obwohl es keine elegante Lösung ist, bietet sie Funktionalität, bis eine bessere Alternative entdeckt wird.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Typzusicherung für ein Go „reflect.TypeOf()'-Ergebnis 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