Maison > développement back-end > Golang > le corps du texte

Pourquoi ne puis-je pas obtenir l'adresse de la fonction dans Golang, mais je peux obtenir la valeur de la fonction

WBOY
Libérer: 2024-02-10 19:30:20
avant
778 Les gens l'ont consulté

为什么我不能获取 golang 中函数的地址,但可以获取函数值

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.

Contenu de la question

Supposons que je déclare une fonction dans Golang :

func myfunc() {     
    }
Copier après la connexion

C'est une erreur de déclarer un pointeur de fonction en utilisant une adresse de fonction

fp := &myfunc
Copier après la connexion

"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
Copier après la connexion

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

Solution

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}
Copier après la connexion

Ci-dessus, une citation de functionvalue 是一个函数变量,其闭包包含对 x.

Quand

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal