Heim  >  Artikel  >  Backend-Entwicklung  >  Wie geht der Compiler von Go mit verschachtelten Funktionen um?

Wie geht der Compiler von Go mit verschachtelten Funktionen um?

WBOY
WBOYnach vorne
2024-02-05 21:39:131226Durchsuche

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)
}

Ist diese Funktion wie folgt kompiliert?

func FuncA() int {
    a := 0
    return _funcB(a)
}
func _funcB(_a int) int {
    return _a
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:Testen mit Gorm und SQLMockNächster Artikel:Testen mit Gorm und SQLMock