Maison  >  Article  >  développement back-end  >  Comment le compilateur de Go gère-t-il les fonctions imbriquées ?

Comment le compilateur de Go gère-t-il les fonctions imbriquées ?

WBOY
WBOYavant
2024-02-05 21:39:131222parcourir

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

Contenu de la question

Lors de l'écriture de fonctions imbriquées dans go, comment le compilateur les gère-t-il ? Devient-elle une autre fonction et placée en dehors du code, ou est-elle recréée lorsque la fonction parent est appelée ?

Par exemple :

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

Cette fonction est-elle compilée comme suit ?

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

Ou compile-t-il exactement comme écrit, ce qui signifie qu'une nouvelle mémoire est allouée à chaque fois que la définition de funca 时都会为 funcb est appelée ?


Bonne réponse


Les fonctions imbriquées sont compilées une seule fois.

Étant donné que FuncB ne ferme pas les variables dans la portée environnante, FuncA n'alloue pas de mémoire tas.

Si FuncB ferme des variables dans la portée environnante, alors ces variables seront allouées sur le tas. La fonction elle-même est compilée une fois.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Article précédent:Test avec gorm et sqlmockArticle suivant:Test avec gorm et sqlmock