Go のポインター関連のエラーについて
Go では、「のアドレスを取得できません」や「次のアドレスを取得できません」などのエラーが発生することがあります。ポインタを操作するときは、ポインタ メソッドを呼び出す必要があります。この質問と回答では、これらのエラーの背後にある理由を調査し、考えられる回避策を示します。
コンパイルして動作する次のコードを考えてみましょう:
ただし、2 つの操作を組み合わせようとすると、
を 1 行にまとめます。前述のエラーが発生します。その理由を理解するには、Go のレシーバーの型と値のアドレス指定可能性を詳しく調べる必要があります。
ポインター レシーバーとアドレス指定可能
Vector3 の Normalize() メソッドには、ポインター レシーバー (*Vector3)。Vector3 値へのポインターを呼び出す必要があることを示します。ショートカット diff.Normalize() を使用すると、コンパイラーは diff 変数 (&diff) のアドレスを自動的に取得して、必要なポインター レシーバーの型と一致させます。
ただし、2 番目の例では、 diff.Minus(c .Origin) は、アドレス指定できない Vector3 値を返します。これは、コンパイラーがそのアドレスを取得して Normalize() に渡すことができないことを意味します。
ポインター レシーバーとアドレス指定可能性の回避策
この問題には、いくつかの回避策があります。
その他の考慮事項
以上がメソッドをチェーンするときに Go が「アドレスを取得できません」または「ポインタ メソッドを呼び出すことができません」というエラーを返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。