Heim > Backend-Entwicklung > Golang > Wie können Sie Funktionen in Go vergleichen, wenn Standardvergleichsoperatoren nicht funktionieren?

Wie können Sie Funktionen in Go vergleichen, wenn Standardvergleichsoperatoren nicht funktionieren?

Mary-Kate Olsen
Freigeben: 2024-10-31 07:27:01
Original
467 Leute haben es durchsucht

How can you compare functions in Go if standard comparison operators don't work?

Vergleichen von Funktionen in Go

In Go ist der Vergleich zweier Funktionswerte mithilfe von Standardvergleichsoperatoren nicht möglich. Es gibt jedoch alternative Methoden, um zu prüfen, ob Funktionen gleichwertig sind.

Funktionsadressen verwenden

Funktionswerte selbst sind nicht vergleichbar. Stattdessen können Sie die Adressen der Funktionswerte vergleichen, um festzustellen, ob sie sich auf dieselbe Funktion beziehen. Um die Adresse der Funktion zu erhalten, können Sie die Funktion Sprintf("%v") des fmt-Pakets verwenden:

<code class="go">hand := &Handler{Undefined, Defined}
p1 := fmt.Sprintf("%v", Undefined)
p2 := fmt.Sprintf("%v", hand.Get)

if p1 == p2 {
    // Undefined and hand.Get refer to the same function.
}</code>
Nach dem Login kopieren

Verwenden Sie „reflect.Value“

Ein anderer Ansatz besteht darin, Verwenden Sie den Typ „reflect.Value“, um den zugrunde liegenden Funktionszeiger abzurufen. Genau das macht das fmt-Paket intern:

<code class="go">value := reflect.ValueOf(Undefined)
ptr := value.Pointer()</code>
Nach dem Login kopieren

Sie können dann die ptr-Werte vergleichen, um festzustellen, ob die Funktionen gleich sind.

Vorsicht

Es ist jedoch wichtig zu beachten, dass der Vergleich von Funktionsadressen nicht für alle Szenarien eine zuverlässige Methode ist. Funktionsabschlüsse und dynamisch generierte Funktionen können unterschiedliche Adressen haben, selbst wenn sie dieselbe Aufgabe ausführen.

Daher wird generell empfohlen, den Vergleich von Funktionsadressen zu vermeiden und stattdessen alternative Ansätze zum Vergleich des Funktionsverhaltens in Betracht zu ziehen, wie z. B. das Testen ihrer Eingaben und Ausgabewerte.

Das obige ist der detaillierte Inhalt vonWie können Sie Funktionen in Go vergleichen, wenn Standardvergleichsoperatoren nicht funktionieren?. 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