Heim  >  Artikel  >  Backend-Entwicklung  >  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
Mary-Kate OlsenOriginal
2024-10-31 07:27:01377Durchsuche

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>

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>

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!

Stellungnahme:
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