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