ホームページ >バックエンド開発 >Golang >Go ジェネリックでユニオン型制約のある共有メソッドを使用するにはどうすればよいですか?

Go ジェネリックでユニオン型制約のある共有メソッドを使用するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-23 12:30:09122ブラウズ

How Can I Use Shared Methods with Union Type Constraints in Go Generics?

Go のジェネリック制約: 共用型の共有メソッドの使用

Go ジェネリック (v1.18) では、型共用体制約を使用すると、次のことが可能になります。ジェネリック型パラメーターに割り当てることができる型のセットを定義します。ただし、これらの型に共有メソッドを使用すると、エラーが発生する可能性があります。

次のコードを考えてください:

type A struct {}
type B struct {}

type AB interface {
    *A | *B
}

func (a *A) some() bool {
    return true
}

func (b *B) some() bool {
    return false
}

func some[T AB](x T) bool {
    return x.some()   // <- error
}

エラーは、コンパイラが共用体型 AB のメソッドを見つけられないために発生します。 。これを解決するには、インターフェイス制約にメソッドを追加する必要があります。

type AB interface {
    *A | *B
    some() bool
}

func some[T AB](x T) bool {
    return x.some()   // works
}

これにより、ジェネリック型 T が *A と *B の両方を実装する型に制限され、メソッドも定義されます。

ただし、Go 1.18 リリースノートに記載されているように、これは一時的な制限です。 Go 1.19 ではこの制限が削除され、コンパイラが共用体型からメソッドを自動的に推論できるようになる予定です。

以上がGo ジェネリックでユニオン型制約のある共有メソッドを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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