Go では、型引数がジェネリックのインスタンス化の性質によるものであっても、ジェネリック型を別のジェネリック型に代入することはできません。
のジェネリック型Go
ジェネリック型では、さまざまなデータ型で使用できるテンプレートを定義することでコードを再利用できます。ジェネリック型をインスタンス化するときは、具体的な型の引数を指定して、使用する特定のデータ型を指定します。
代入の制限
あるジェネリック型の値を別のジェネリック型に代入することは、常に許可されるわけではありません。これは、異なる型引数を使用してジェネリック型をインスタンス化すると、2 つの異なる名前付き型が作成されるためです。
例:
type Props[G Generic] struct{} type Example struct{} func (Example) ID() string { return "" } var ExampleProps = Props[Example]{} func Problem() Props[Generic] { return ExampleProps // Compilation error }
この例では、Example は Generic インターフェイスを実装します。ただし、Props[Example] と Props[Generic] は依然として異なるタイプとみなされます。したがって、ExampleProps (Props[Example] 型) を Problem (Props[Generic] を返す) に割り当てることはできません。
解決策
ジェネリック型間で値を割り当てるには、型パラメーターを使用してジェネリック型をインスタンス化します。例:
func Problem[T Generic](v T) Props[T] { return Props[T]{Value: v} }
この場合、問題は汎用パラメーター T を受け取り、T で Props をインスタンス化します。これにより、柔軟性が高まり、型引数が特定の条件を満たす状況で使用できます。
以上が型引数に互換性がある場合でも、Go であるジェネリック型を別のジェネリック型に代入できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。