Go ジェネリックスの共用体は、次の目的で使用できる型のセットを表します。ジェネリック型パラメータを制約します。これらはインターフェイス制約でのみ使用され、ジェネリック型パラメーター T が共用体に含まれる型のみを受け入れることができることを示します。
ジェネリック関数の単体テストを作成する場合、さまざまなタイプを使用してテストするという課題に直面する可能性があります。あなたの場合、同じテーブル テスト内で int と文字列の両方を使用して Difference 関数をテストすることを目的としていました。
テスト用に intOrString インターフェイス制約を作成しようとしましたが、 intOrString が有効な型ではないため、エラーが発生しました。これは、ジェネリック型パラメーター T を int または string に制限する制約です。型制約を使用して型を直接インスタンス化することはできません。
intOrString 制約を使用する代わりに、テストの入力スライスと出力スライスをジェネリック型として宣言する必要があります。 intOrString 制約:
type testDifferenceInput[T intOrString] [][]T type testDifferenceOutput[T intOrString] []T
ただし、このアプローチでは問題が完全に解決されるわけではありません。汎用コンテナには、異なるタイプのアイテムを保持できません。テスト スライスには、testDifference[int] と testDifference[string] という 2 つの異なる型があります。
単体テストで異なる型に対応するには、タイプ別のスライス:
ttInts := []testDifference[int]{ // ... test cases for ints } ttStrs := []testDifference[string]{ // ... test cases for strings }
ユニオン制約ジェネリック型パラメーターに対して実行できる操作を制限します。 int | の場合文字列の場合、比較、順序付け、加算 (文字列のみ) など、両方の型に適用できる操作のみが許可されます。
以上がユニオン制約内で型が混合された Go ジェネリック関数を効果的に単体テストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。