この記事では、コンパイラ エラー「type *T は型ではなく型パラメーターへのポインターです」が発生する理由の複雑さを詳しく掘り下げています。
Go ジェネリックでは、型パラメータは、指定された制約を満たす任意の型のプレースホルダーを表します。特に、制約は型パラメーターで使用できる一連の操作を定義しますが、その型パラメーターから派生したポインター型のプロパティを直接定義するわけではありません。これは、発生したエラー メッセージの核心です。
このエラー メッセージは、*T のメソッド セットには、対象となる具象型で宣言されたポインタ レシーバ メソッドが自動的に含まれないことを示します。拘束された。これは、制約インターフェイスにポインター レシーバー メソッドが必要な場合、具象型でポインター レシーバーを使用してそれを実装する必要があることを意味します。
提供されるコード スニペット内:
<code class="go">type GS interface { Id() string (*GS) SetId(string) }</code>
<code class="go">var storeA = &MyStore[*A]{}</code>
<code class="go">type MyStore[T GS] struct { values map[string]T } func (s *MyStore[T]) add(item T) {...}</code>
これらの調整を行うことで、コードは構文的にも意味的にも正しくなります。
以上がジェネリックスを使用すると、「type *T は型パラメータへのポインタであり、型パラメータではありません」というエラーがスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。