Warum kann ich in Golang nicht die Adresse der Funktion abrufen, aber den Funktionswert?

WBOY
Freigeben: 2024-02-10 19:30:20
nach vorne
776 Leute haben es durchsucht

为什么我不能获取 golang 中函数的地址,但可以获取函数值

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.

Inhalt der Frage

Angenommen, ich deklariere eine Funktion in golang:

func myfunc() {     
    }
Nach dem Login kopieren

Es ist ein Fehler, einen Funktionszeiger mithilfe einer Funktionsadresse zu deklarieren

fp := &myfunc
Nach dem Login kopieren

„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
Nach dem Login kopieren

Unterscheidet sich „functionvalue“ von der Verwendung des Funktionsnamens „myfunc“? Sind das nicht beide vom gleichen Typ? (Function())

Solution

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}
Nach dem Login kopieren

Oben ein Zitat von functionvalue 是一个函数变量,其闭包包含对 x.

Wenn

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!

Quelle:stackoverflow.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage