L'éditeur PHP Zimo répondra à votre place : Pourquoi ne puis-je pas obtenir l'adresse de la fonction dans Golang, mais puis-je obtenir la valeur de la fonction ? Dans Golang, les valeurs de fonction peuvent être obtenues car les valeurs de fonction sont un type qui peut être appelé. L'adresse de la fonction ne peut pas être obtenue, ce qui est déterminé par la décision de conception de Golang. Les fonctions à Golang sont des citoyens de première classe et peuvent être attribuées, transmises et appelées comme les autres types. Par conséquent, les valeurs des fonctions peuvent être obtenues et transmises à d'autres fonctions. Cependant, l'implémentation de la fonction Golang est implémentée via des fermetures. Chaque fois qu'une fonction est créée, une nouvelle instance de fermeture est générée, de sorte que l'adresse de la fonction n'est pas fixe et ne peut pas être obtenue. Une telle conception peut garantir l'indépendance et la sécurité des fonctions, tout en simplifiant le processus de gestion de la mémoire et de garbage collection. Ainsi, même si vous ne pouvez pas obtenir l'adresse de la fonction, vous pouvez obtenir la valeur de la fonction et l'appeler.
Supposons que je déclare une fonction dans Golang :
func myfunc() { }
C'est une erreur de déclarer un pointeur de fonction en utilisant une adresse de fonction
fp := &myfunc
"Opération invalide : impossible d'obtenir l'adresse de myfunc (valeur de type func())"
Cependant, je peux l'attribuer à une valeur de fonction et obtenir l'adresse
functionValue := myFunc fp := &function
Est-ce que « functionvalue » est différent de l'utilisation du nom de fonction « myfunc » ? Ne sont-ils pas tous les deux du même type ? (Fonction())
myfunc
是一个函数。 functionvalue
est une variable de fonction, qui est une variable pointant vers une fonction et également une fermeture. Par exemple :
var x int functionValue:=func() int {return x}
Ci-dessus, une citation de functionvalue
是一个函数变量,其闭包包含对 x
.
ressemble à myfunc
这样的命名函数没有与之关联的闭包。像 functionvalue
这样的函数变量有一个闭包。当您将其分配给 myfunc
, la fermeture est vide. Lorsque vous l'attribuez comme ci-dessus, il n'est pas nul. Par conséquent, le mécanisme d’appel d’une fonction est différent de celui d’une variable de fonction.
L'adresse d'une variable de fonction est l'adresse de la variable.
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!