In Golang können Nullwerte nicht direkt Schnittstellentypen zugewiesen werden. Dies liegt daran, dass Null das Fehlen eines Werts darstellt, während Schnittstellen Zeiger auf Werte darstellen sollen. Beim Versuch, einen Nullwert an ein Schnittstellenargument zu übergeben, prüft das Programm, ob das Argument Null ist, und gibt möglicherweise einen Fehler zurück oder verhält sich auf unerwartete Weise.
Um dieses Problem zu umgehen, kann Reflektion verwendet werden, um einen Nullwert zu erstellen Wert, der an ein Schnittstellenargument übergeben werden kann und die Nullprüfung besteht. Reflection ermöglicht den programmgesteuerten Zugriff auf die zugrunde liegenden Typen und Werte von Variablen.
Lösung:
Verwenden Sie den Ausdruck „reflect.TypeOf((*error)(nil)).Elem.“ (), um den Reflect.Type für den Schnittstellenfehler zu erhalten. Dieser Ausdruck verwendet einen Nicht-Schnittstellenwert, *error, um den richtigen Reflect.Type zu erhalten. Anschließend wird Elem für das Ergebnis aufgerufen, um den „reflect.Type“ für den Fehler abzurufen.
Um das nilArg zu erstellen, verwenden Sie den folgenden Ausdruck:
nilArg := reflect.Zero(reflect.TypeOf((*error)(nil)).Elem())
Dieser Ausdruck erstellt einen Nullwert vom Typ Fehler. Das ursprüngliche Problem trat auf, weil Reflect.TypeOf((error)(nil)) Null zurückgegeben hat, da der konkrete Typ eines Null-Schnittstellenwerts Null ist.
Beispiel:
func main() { rf := reflect.ValueOf(f) nilArg := reflect.Zero(reflect.TypeOf((*error)(nil)).Elem()) rf.Call([]reflect.Value{nilArg}) }
Diese Lösung ermöglicht es der f-Funktion, den Nullwert zu empfangen und die == Nullprüfung zu bestehen.
Das obige ist der detaillierte Inhalt vonWie kann Reflection in Go mit der Übergabe von Nullwerten an Schnittstellenargumente umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!