ホームページ >バックエンド開発 >Golang >Go Generics で `Props[Example]` を `Props[Generic]` に代入できないのはなぜですか?

Go Generics で `Props[Example]` を `Props[Generic]` に代入できないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-20 09:15:11357ブラウズ

Why Can't I Assign `Props[Example]` to `Props[Generic]` in Go Generics?

ジェネリック型割り当ての制限

次のコードを考えてみましょう。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。