PHP-Editor Zimo wird für Sie antworten: Warum kann ich in Golang nicht die Adresse der Funktion, aber den Funktionswert erhalten? In Golang können Funktionswerte abgerufen werden, da Funktionswerte ein Typ sind, der aufgerufen werden kann. Die Adresse der Funktion ist nicht erhältlich, was durch Golangs Designentscheidung bestimmt wird. Funktionen in Golang sind erstklassige Bürger und können wie andere Typen zugewiesen, übergeben und aufgerufen werden. Daher können Funktionswerte abgerufen und an andere Funktionen übergeben werden. Die Funktionsimplementierung von Golang wird jedoch durch Schließungen implementiert. Jedes Mal, wenn eine Funktion erstellt wird, wird eine neue Schließungsinstanz generiert, sodass die Adresse der Funktion nicht festgelegt ist und nicht abgerufen werden kann. Ein solches Design kann die Unabhängigkeit und Sicherheit von Funktionen gewährleisten und gleichzeitig den Prozess der Speicherverwaltung und Speicherbereinigung vereinfachen. Obwohl Sie also nicht die Adresse der Funktion erhalten können, können Sie den Funktionswert erhalten und ihn aufrufen.
Angenommen, ich deklariere eine Funktion in golang:
func myfunc() { }
Es ist ein Fehler, einen Funktionszeiger mithilfe einer Funktionsadresse zu deklarieren
fp := &myfunc
„Ungültiger Vorgang: Adresse von myfunc (Wert vom Typ func()) konnte nicht abgerufen werden“
Allerdings kann ich es einem Funktionswert zuweisen und die Adresse erhalten
functionValue := myFunc fp := &function
Unterscheidet sich „functionvalue“ von der Verwendung des Funktionsnamens „myfunc“? Sind das nicht beide vom gleichen Typ? (Function())
myfunc
是一个函数。 functionvalue
ist eine Funktionsvariable, bei der es sich um eine Variable handelt, die auf eine Funktion zeigt, und auch auf einen Abschluss. Zum Beispiel:
var x int functionValue:=func() int {return x}
Oben ein Zitat von functionvalue
是一个函数变量,其闭包包含对 x
.
wie myfunc
这样的命名函数没有与之关联的闭包。像 functionvalue
这样的函数变量有一个闭包。当您将其分配给 myfunc
aussieht, ist der Verschluss leer. Wenn Sie es wie oben zuweisen, ist es ungleich Null. Daher unterscheidet sich der Mechanismus zum Aufrufen einer Funktion vom Aufruf einer Funktionsvariablen.
Die Adresse einer Funktionsvariablen ist die Adresse der Variablen.
Das obige ist der detaillierte Inhalt vonWarum kann ich in Golang nicht die Adresse der Funktion abrufen, aber den Funktionswert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!