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 }
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() }
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() } }
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!