Heim > Backend-Entwicklung > Golang > Wie kann Reflection in Go mit der Übergabe von Nullwerten an Schnittstellenargumente umgehen?

Wie kann Reflection in Go mit der Übergabe von Nullwerten an Schnittstellenargumente umgehen?

Barbara Streisand
Freigeben: 2024-11-24 10:47:11
Original
945 Leute haben es durchsucht

How Can Reflection in Go Handle Passing Nil Values to Interface Arguments?

Übergabe von Nullwerten an Schnittstellenargumente über Reflection in Golang

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

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

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!

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