Go では、odsMap[segRef].GetValue("@ のように、ドット表記を使用してマップ要素にアクセスします) OriginDestinationKey") を指定すると、マップ要素のアドレスを取得できないことを示すエラーが発生します。これは、マップ インデックス式の固有の性質によるものです。
アドレス指定可能なスライスや配列とは異なり、マップ インデックス式はアドレス指定可能ではありません。これは、新しいエントリの追加時にマップの内部が変更され、設計上アドレス指定不可能になる可能性があるためです。
この問題を解決するために、マップ実装の柔軟性が向上しました。ただし、この柔軟性により、マップ インデックス式のアドレスを取得できなくなります。これは、ポインター レシーバーを処理するときに問題になります。
非ポインター値がマップに格納されており、ポインター レシーバーを持つメソッドを呼び出す必要がある場合、受信側として使用する非ポインター値のアドレスを取得する必要があります。ただし、マップ インデックス式はアドレス指定できないため、コンパイル時エラーが発生します。
この制限を回避するには、ポインタ値をマップに格納して、インデックス式のアドレスを取得する必要をなくします。あるいは、アドレスを取得できるローカル変数に値を割り当て、その変数に対してポインタ メソッドを呼び出すこともできます。
ポインタ レシーバを持つメソッドは、指定されたオブジェクトのコンポーネントを変更する可能性があるため、このアプローチを選択する場合は注意が必要です。これらの変更は、マップに格納されている値に反映されない可能性があります。
要約すると、ポインター関連のメソッドを含む値の場合は、非ポインター値ではなくポインターとして使用することをお勧めします。マップ インデックス式によるアドレス可能性の問題を回避します。
以上がGo マップ要素でポインター レシーバー メソッドを直接呼び出すことができないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。