Wie geht der Compiler von Go mit verschachtelten Funktionen um?

WBOY
Freigeben: 2024-02-05 21:39:13
nach vorne
1228 Leute haben es durchsucht

Go 的编译器如何处理嵌套函数?

Frageninhalt

Wie geht der Compiler beim Schreiben verschachtelter Funktionen in go damit um? Wird es zu einer anderen Funktion und außerhalb des Codes platziert, oder wird es neu erstellt, wenn die übergeordnete Funktion aufgerufen wird?

Zum Beispiel:

func funca() int {
    a := 0
    funcb := func(_a int) int {
        return _a
    }
    return funcb(a)
}
Nach dem Login kopieren

Ist diese Funktion wie folgt kompiliert?

func FuncA() int {
    a := 0
    return _funcB(a)
}
func _funcB(_a int) int {
    return _a
}
Nach dem Login kopieren

Oder wird es genau wie geschrieben kompiliert, was bedeutet, dass jedes Mal neuer Speicher zugewiesen wird, wenn die Definition von funca 时都会为 funcb aufgerufen wird?


Richtige Antwort


Verschachtelte Funktionen werden einmal kompiliert.

Da FuncB keine Variablen im umgebenden Bereich schließt, weist FuncA keinen Heap-Speicher zu.

Wenn FuncB Variablen im umgebenden Bereich schließt, werden diese Variablen auf dem Heap zugewiesen. Die Funktion selbst wird einmal kompiliert.

Das obige ist der detaillierte Inhalt vonWie geht der Compiler von Go mit verschachtelten Funktionen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
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