同じ型のジェネリック インスタンスを互いに割り当てることができないのはなぜですか?
Go では、ジェネリック型のインスタンスを異なる型で割り当てることを禁止しています型引数がインターフェイス関係を満たしている場合でも、引数を相互に共有できます。これを説明するには、次のコードを考えてみましょう:
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 }
このコードを実行するとコンパイル エラーが発生します:
cannot use ExampleProps (variable of type Props[Example]) as Props[Generic] value in return statement
このエラーは、新しい型引数を使用してジェネリック型をインスタンス化すると、独特のタイプ。具体的には:
これら 2 つの型は異なります。 Example は Generic を実装しているにもかかわらず、互換性があります。したがって、ExampleProps (Props[Example] のインスタンス) を Props[Generic] に割り当てることは無効です。
この動作は、any でインスタンス化されたジェネリックにも適用されます。 any は、空のインターフェイス (interface{}) のエイリアスを作成する単なる静的型です。これは、「any type」または T と同等ではありません。したがって、any でインスタンス化された型は、別の特定の型でインスタンス化された型に割り当てることはできません。
この問題を解決するには、型パラメータを使用して Props をインスタンス化できます。これにより、関数の入力型と出力型の両方が一貫していることが保証されます。例:
type Props[G Generic] struct{ Value G } func Problem[T Generic](v T) Props[T] { return Props[T]{ Value: v } } func main() { a := Problem(Example{}) fmt.Println(a) }
以上が異なる型引数を持つ Go のジェネリック型を相互に代入できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。