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

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

Susan Sarandon
リリース: 2024-12-20 09:15:11
オリジナル
413 人が閲覧しました

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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:

1

cannot use ExampleProps (variable of type Props[Example]) as Props[Generic] value in return statement

ログイン後にコピー

なぜこれが発生するのですか?

Go ジェネリックスは、異なる型引数でインスタンス化されるときに、まったく新しい名前付き型を作成します。この場合、Example は Generic を実装していますが、Props[Example] と Props[Generic] は別個の名前付き型です。

型パラメータ化による柔軟性

この問題を解決するには柔軟性を維持しながら、型パラメータを使用して Props をインスタンス化できます。

1

2

3

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

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