ポインター メソッドを使用したマップ要素へのアクセス
Go では、ポインター レシーバーを持つメソッドを使用してマップ要素にアクセスすると、課題が生じる可能性があります。これは、マップ インデックス式がアドレス指定できないために発生します。マップ インデックス式でメソッドを呼び出そうとすると、コンパイラは受信側の型がポインタであることを確認します。そうでない場合は、コンパイル時エラーが生成されます。
問題を理解するには、次のコード スニペットを検討してください。
x := odsMap[segRef] x.GetValue("@OriginDestinationKey")
このコードは、変数 x の GetValue メソッドに正常にアクセスします。これには、キー segRef のマップ値が割り当てられます。
ただし、次のコード スニペットはコンパイル時に失敗します。 error:
odsMap[segRef].GetValue("@OriginDestinationKey")
エラー メッセージは、「odsMap[segRef] のアドレスを取得できません」ことを示します。これは、Go マップがアドレス指定可能に設計されておらず、マップ実装の最適化と柔軟性を考慮しているためです。
この制限を回避するには、いくつかのオプションがあります。
これらの解決策は回避策を提供しますが、一般的には、ポインターを持つメソッドでポインター値を使用することをお勧めします。 Go の受信者は addr
を回避します以上がGo マップ要素でポインター レシーバーを使用してメソッドを直接呼び出すことができないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。