Heim > Backend-Entwicklung > Golang > Wie kann ich Funktionszeiger für Identität in Go sicher vergleichen?

Wie kann ich Funktionszeiger für Identität in Go sicher vergleichen?

Linda Hamilton
Freigeben: 2024-12-26 17:55:09
Original
699 Leute haben es durchsucht

How Can I Safely Compare Function Pointers for Identity in Go?

Funktionszeigergleichheit in Go

In Go ist der Vergleich von Funktionszeigern auf Gleichheit mit den Operatoren == oder != für Funktionen nicht zulässig sind nicht gleich Null. Dieses Verhalten verhindert die Vermischung von Gleichheits- und Identitätsvergleichen.

Funktionsgleichheit unterscheidet sich von Funktionsidentität. Identitätsvergleiche sollten verwendet werden, um festzustellen, ob zwei Funktionen dieselbe Funktion sind, während Gleichheitsvergleiche verwendet werden sollten, um festzustellen, ob zwei Funktionen äquivalent sind.

Verwenden des Reflect-Pakets zum Vergleichen der Funktionsidentität, wie im Atom-Beispiel gezeigt gilt als undefiniertes Verhalten. Der Compiler optimiert möglicherweise Funktionen, indem er ihre Implementierungen zusammenführt, wodurch der Vergleich unzuverlässig wird.

Um Funktionszeiger korrekt auf Identität zu vergleichen, können Sie für jede Funktion eindeutige Variablen erstellen und dann die Adressen dieser Variablen vergleichen. Dieser Ansatz stellt sicher, dass Sie Funktionszeiger für dieselbe Funktion vergleichen, unabhängig von Optimierungen.

Hier ist ein Beispiel für den Vergleich von Funktionszeigern auf Identität:

package main

import "fmt"

func F1() {}
func F2() {}

var F1_ID = F1  // Create a *unique* variable for F1
var F2_ID = F2  // Create a *unique* variable for F2

func main() {
    f1 := &F1_ID  // Take the address of F1_ID
    f2 := &F2_ID  // Take the address of F2_ID

    // Compare pointers
    fmt.Println(f1 == f1)  // Prints true
    fmt.Println(f1 == f2)  // Prints false
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich Funktionszeiger für Identität in Go sicher vergleichen?. 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