php エディター Zimo が答えます: なぜ golang で関数のアドレスは取得できないのに、関数の値は取得できるのでしょうか? Golangでは関数値が呼び出せる型なので関数値を取得できます。関数のアドレスは取得できません。これは Golang の設計上の決定によって決まります。 Golang の関数は第一級市民であり、他の型と同様に割り当て、渡し、呼び出しが可能です。したがって、関数の値を取得して他の関数に渡すことができます。しかし、Golangの関数実装はクロージャによって実装されており、関数が作成されるたびに新たなクロージャインスタンスが生成されるため、関数のアドレスは固定ではなく取得することができません。このような設計により、機能の独立性と安全性を確保しながら、メモリ管理とガベージ コレクションのプロセスを簡素化できます。したがって、関数のアドレスを取得することはできませんが、関数の値を取得して呼び出すことはできます。
golangで関数を宣言したとします:
リーリー関数アドレスを使用して関数ポインタを宣言するとエラーになります
リーリー「無効な操作: myfunc のアドレス (func() 型の値) を取得できません」
ただし、関数値に代入してアドレスを取得することはできます
リーリー「functionvalue」は関数名「myfunc」を使用することと何か違いますか? どっちも同じタイプじゃないの? (関数 ())
myfunc
は関数です。 functionvalue
は関数変数で、関数とクロージャを指す変数です。例えば:###
リーリー
functionvalue は、クロージャに
x への参照が含まれる関数変数です。
のような名前付き関数には、クロージャが関連付けられていません。 functionvalue
のような関数変数にはクロージャがあります。 myfunc
に割り当てると、クロージャは空になります。上記のように配置するとnullではなくなります。したがって、関数を呼び出すメカニズムは、関数変数を呼び出すメカニズムとは異なります。
関数変数のアドレスは、変数のアドレスです。
以上がgolang で関数のアドレスは取得できないのに、関数の値は取得できるのはなぜですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。