ホームページ > バックエンド開発 > Golang > 型引数に互換性がある場合でも、Go であるジェネリック型を別のジェネリック型に代入できないのはなぜですか?

型引数に互換性がある場合でも、Go であるジェネリック型を別のジェネリック型に代入できないのはなぜですか?

DDD
リリース: 2025-01-04 12:30:33
オリジナル
614 人が閲覧しました

Why Can't I Assign One Generic Type to Another in Go, Even If Their Type Arguments Are Compatible?

ジェネリック型の代入制限について理解する

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート