Nullwerte als Schnittstellen durch Reflexion übergeben
Das Nachdenken über Schnittstellen stellt die Herausforderung dar, Nullwerte effektiv zu übergeben. Betrachten Sie die folgende Funktion:
func f(e error) { if e == nil { fmt.Println("YEY! NIL") // Aim for this } else { fmt.Println("NOT NIL :(") } }
Wenn Sie versuchen, mithilfe des folgenden Codes per Reflektion einen Nullwert an die Funktion zu übergeben, führt dies zu einer Panik:
nilArg := reflect.Zero(reflect.TypeOf((error)(nil)))
Don' Nicht verzweifeln! Um das Problem zu umgehen, verwenden Sie den Ausdruck „reflect.TypeOf((*error)(nil)).Elem()“, um den „reflect.Type“ für den Schnittstellenfehler zu erhalten. Bei diesem Trick wird ein Nicht-Schnittstellenwert an „reflect.TypeOf()“ übergeben und „reflect.Elem()“ verwendet, um den gewünschten Typ abzuleiten.
Verwenden Sie für die nilArg-Konstruktion Folgendes:
nilArg := reflect.Zero(reflect.TypeOf((*error)(nil)).Elem())
Genießen Sie ein funktionierendes Spielplatzbeispiel, um Ihr Verständnis zu festigen.
Das obige ist der detaillierte Inhalt vonWie kann ich mit Go Reflection sicher Null-Schnittstellenwerte übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!