ジェネリック型割り当ての制限
次のコードを考えてみましょう。
type Generic interface { ID() string } type Props[G Generic] struct{} type Example struct { id string } func (example Example) ID() string { return example.id } var ExampleProps = Props[Example]{} func Problem() Props[Generic] { return ExampleProps }
このコードは、 error:
cannot use ExampleProps (variable of type Props[Example]) as Props[Generic] value in return statement
なぜこれが発生するのですか?
Go ジェネリックスは、異なる型引数でインスタンス化されるときに、まったく新しい名前付き型を作成します。この場合、Example は Generic を実装していますが、Props[Example] と Props[Generic] は別個の名前付き型です。
型パラメータ化による柔軟性
この問題を解決するには柔軟性を維持しながら、型パラメータを使用して Props をインスタンス化できます。
func Problem[T Generic](v T) Props[T] { return Props[T]{Value: v} }
このアプローチでは、 Generic を実装する特定のジェネリック型 T の Props[T] を返す関数。
概要
Go ジェネリックスでは、異なる型引数でジェネリック型をインスタンス化すると、次のようになります。異なる名前付きタイプ。したがって、型引数が特定の条件を満たしている場合でも、ある型を別の型に代入しようとすることは許可されません。型パラメーター化を使用すると、このようなシナリオで柔軟性を維持するためのソリューションが提供されます。
以上がGo Generics で `Props[Example]` を `Props[Generic]` に代入できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。