Go のジェネリック プログラミング モデルでは、型パラメーターはプレースホルダー型を表します。具体的な型を使用してインスタンス化できます。ただし、型パラメーターは、ポインター型 (*T) の特定のプロパティやメソッド セットを意味しません。一方、制約は、型パラメータを実装するために具象型が満たさなければならない要件を定義します。
エラー「type T は次のポインタです」 「型パラメーターではなく型パラメーター」という問題は、具体型のポインター (T) で定義されたメソッドを型パラメーターのメソッド セットの一部として使用しようとすると発生します。これは、型パラメータとそのポインタ型が別個のエンティティであるためです。
この問題を解決するには、両方にメソッドを実装するために具象型を必要とする制約を明示的に宣言できます。型とそのポインタ:
func Foo[T any, PT interface { SetId(string); *T}](v T) {}
制約を実装するときは、メソッドが適切に宣言されていることを確認してください。 T で宣言された SetId メソッドを持つ GS インターフェイスの場合、A で MyStore をインスタンス化し、具体的な型に一致するように MyStore 内のフィールドの型を変更する必要があります:
var storeA = &MyStore[*A]{} type MyStore[T GS] struct { values map[string]T } func (s *MyStore[T]) add(item T) {}
制約を調整し、それに応じてメソッドを実装することで、Go コードでジェネリックを効果的に利用できます。
以上がGo ジェネリックの型パラメーターへのポインターでメソッドを使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。