Go が *T のメソッド セットを T で使用できない理由
Go では、値型 T で定義されたメソッドを使用できますT と *T の両方で使用できますが、ポインタ型 *T で定義されたメソッドは T では使用できません。この一見恣意的な区別は、コンピュータ システムのメモリの複雑さに由来しています。
上でポインタを取得できないDemand
*T のメソッドが T 変数を使用して呼び出される場合を考えてみましょう。これを実現するには、T 変数へのポインターを取得する必要があります。ただし、ポインタの取得が常に可能であるとは限りません。
Go の仕様には、アドレス演算 (&) を実行できる条件が明示的に記載されています。これには、変数へのアクセス、ポインターの間接指定、配列のインデックス付け操作が含まれます。ただし、次の例のように、マップに格納されている変数へのアクセスは除外されます。
<code class="go">res := TMap["key"].pointerMethod()</code>
このような場合、ランタイムの実装に制約が課されるため、変数へのポインターを取得することは現実的ではありません。
設計の結果
この設計上の決定には、利点と欠点の両方があります。
利点:
欠点:
以上が*T で定義された Go メソッドを T で使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。