Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah pengkompil Go mengendalikan fungsi bersarang?

Bagaimanakah pengkompil Go mengendalikan fungsi bersarang?

WBOY
WBOYke hadapan
2024-02-05 21:39:131188semak imbas

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

Kandungan soalan

Apabila menulis fungsi bersarang dalam go, bagaimana pengkompil mengendalikannya? Adakah ia menjadi fungsi lain dan diletakkan di luar kod, atau adakah ia dicipta semula apabila fungsi induk dipanggil?

Contohnya:

func funca() int {
    a := 0
    funcb := func(_a int) int {
        return _a
    }
    return funcb(a)
}

Adakah fungsi ini disusun seperti berikut?

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

Atau adakah ia menyusun betul-betul seperti yang ditulis, bermakna ingatan baru diperuntukkan setiap kali definisi funca 时都会为 funcb dipanggil?


Jawapan betul


Fungsi bersarang disusun sekali.

Oleh kerana FuncB tidak menutup pembolehubah dalam skop sekeliling, FuncA tidak memperuntukkan memori timbunan.

Jika FuncB menutup sebarang pembolehubah dalam skop sekeliling, maka pembolehubah tersebut akan diperuntukkan pada timbunan. Fungsi itu sendiri disusun sekali.

Atas ialah kandungan terperinci Bagaimanakah pengkompil Go mengendalikan fungsi bersarang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Menguji dengan gorm dan sqlmockArtikel seterusnya:Menguji dengan gorm dan sqlmock