Go でジェネリックを使用する場合、次のエラーが発生する場合があります:
item.SetId 未定義 (type *T は型パラメータではなく、型パラメータへのポインタです)
このエラーは、ジェネリックを使用してオブジェクト ストアを実装しようとすると発生します。この問題は、型パラメータ T がそれ自体へのポインタ *T ではないという事実に起因します。したがって、具象型 T で定義されたポインター レシーバー メソッドは、*T のメソッド セットに暗黙的に含まれません。
これを解決するには、 T は GS インターフェイスを実装し、SetId メソッドのポインター レシーバーを持つポインター型でなければならないという制約:
<code class="go">func Foo[T any, PT interface { SetId(string); *T}](v T) {}</code>
発生する可能性のある別のエラーは次のとおりです。
A は GS を実装していません (SetId メソッドにはポインター レシーバーがあります)
このエラーは、SetId メソッドが A ではなく *A で宣言されていることを示します。これを修正するには、MyStore を *A の代わりにインスタンス化します。 A を作成し、それに応じて構造体フィールドとメソッドの型を調整します。
<code class="go">var storeA = &MyStore[*A]{} type MyStore[T GS] struct { values map[string]T } func (s *MyStore[T]) add(item T) { }</code>
Go でジェネリックスを扱う場合、これらの型パラメーターの考慮事項と実装の制約を理解することが重要です。これらの問題に対処することで、ジェネリックを効果的に使用して、再利用可能で保守可能なコードを実装できます。
以上がGo Generics が「item.SetId unknown」エラーをスローするのはなぜですか? それらを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。