Heim > Backend-Entwicklung > Golang > Wie kann ich mithilfe von Reflection schnell leere Werte in Go-Schnittstellen erkennen?

Wie kann ich mithilfe von Reflection schnell leere Werte in Go-Schnittstellen erkennen?

Patricia Arquette
Freigeben: 2024-12-14 06:54:49
Original
267 Leute haben es durchsucht

How Can I Quickly Detect Empty Values in Go Interfaces Using Reflection?

Schnelle Erkennung leerer Werte durch Reflexion in Go

Beim Umgang mit Schnittstellen, die int, string, bool oder andere Werte speichern, ist dies der Fall Dies ist häufig erforderlich, um festzustellen, ob der gespeicherte Wert nicht initialisiert ist. Dies bedeutet, dass überprüft wird, ob es einem der folgenden Werte entspricht:

  • 0 (für int)
  • "" (für string)
  • false (für bool)
  • nil (für Hinweise und andere Referenzen Typen)

Lösung:

Um dies in Go effizient zu überprüfen, können Sie Reflection und die Funktion „reflect.Zero()“ verwenden:

func IsZeroOfUnderlyingType(x interface{}) bool {
    return x == reflect.Zero(reflect.TypeOf(x)).Interface()
}
Nach dem Login kopieren

Erklärung:

  • reflect.TypeOf(x) ruft ab die Typinformationen des Schnittstellenwerts x.
  • reflect.Zero(reflect.TypeOf(x)) erstellt einen Nullwert dieses Typs.
  • Interface() wandelt den Nullwert zurück in einen Schnittstellenwert.
  • Der Vergleich von x mit dem Nullwert mithilfe des ==-Operators prüft, ob der gespeicherte Wert leer ist (d. h. nicht initialisiert).

Hinweis:

Die ursprüngliche Lösung verwendete == zum Vergleich, was möglicherweise nicht für Typen funktioniert, die nicht vergleichbar sind. Um eine universelle Kompatibilität sicherzustellen, können Sie stattdessen „reflect.DeepEqual()“ verwenden:

func IsZeroOfUnderlyingType(x interface{}) bool {
    return reflect.DeepEqual(x, reflect.Zero(reflect.TypeOf(x)).Interface())
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von Reflection schnell leere Werte in Go-Schnittstellen erkennen?. 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