Go ジェネリック - 型制約と共用体の説明
Go ジェネリックでは、共用体はインターフェイス制約の一部として特定の役割を果たします。これが何を意味するのか、そしてそれがさまざまな型でのテストに関する質問とどのように関係しているのかを紐解いてみましょう。
共用体とは何ですか?
ジェネリック型制約では、共用体は次のセットを定義します。型パラメータが一致する必要がある型。例:
type intOrString interface { int | string }
この制約により、ジェネリック型パラメーター T は必ず int または string でなければなりません。
なぜ共用体を型として使用できないのですか?
共用体を使用したインターフェイス制約は、通常のインターフェイス タイプではありません。この区別は、Go の汎用設計では意図的なものです。
共用体制約で許可される操作
共用体制約のある型パラメーターを使用する関数は、のすべてのメンバーによって許可された操作のみを実行できます。結合セット。これには以下が含まれます。
に適用する質問
元のアプローチでは intOrString を型として使用していましたが、これは許可されていません。共用体制約を正しく使用するには、コードを次のように変更します。
type testDifferenceInput[T intOrString] [][]T type testDifferenceOutput[T intOrString] []T type testDifference[T intOrString] struct { input testDifferenceInput[T] output testDifferenceOutput[T] } func TestDifference(t *testing.T) { var ttInts []testDifference[int] var ttStrings []testDifference[string] // Populate ttInts and ttStrings with test cases for _, tt := range append(ttInts, ttStrings) { // Execute the test case } }
型パラメータに基づいてテスト ケースを分離することで、汎用コンテナが異なる項目を保持できないという制限を回避できます。タイプ。
以上がテストの型制約で Go ジェネリック ユニオンを効果的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。