Effiziente Erkennung leerer Werte in Go mithilfe von Reflection
Beim Umgang mit Schnittstellen{}-Werten in Go und der Notwendigkeit festzustellen, ob sie nicht initialisiert sind ( d. h. einen Wert von 0, „“, „falsch“ oder „nil“ haben), bietet Reflexion eine praktische Lösung. So können Sie dies erreichen:
func IsZeroOfUnderlyingType(x interface{}) bool { return x == reflect.Zero(reflect.TypeOf(x)).Interface() }
Es ist wichtig, zwischen zwei unterschiedlichen Konzepten zu unterscheiden:
Die obige Funktion prüft auf der zweite Fall, bei dem der zugrunde liegende Wert Null ist.
Gegenleistung für nicht vergleichbar Typen
Die Funktion verwendet den ==-Operator, der für nicht vergleichbare Typen möglicherweise nicht funktioniert. Um dieses Problem zu beheben, können Sie stattdessen „reflect.DeepEqual()“ verwenden:
func IsZeroOfUnderlyingType(x interface{}) bool { return reflect.DeepEqual(x, reflect.Zero(reflect.TypeOf(x)).Interface()) }
Diese aktualisierte Funktion funktioniert korrekt mit allen Typen, auch mit nicht vergleichbaren.
Das obige ist der detaillierte Inhalt vonWie lassen sich Nullwerte in Go-Schnittstellen mithilfe von Reflection effizient erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!