ホームページ > バックエンド開発 > Golang > ユニオン制約内で型が混合された Go ジェネリック関数を効果的に単体テストするにはどうすればよいですか?

ユニオン制約内で型が混合された Go ジェネリック関数を効果的に単体テストするにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-04 16:46:39
オリジナル
972 人が閲覧しました

How Can I Effectively Unit Test Go Generics Functions with Mixed Types in a Union Constraint?

Go ジェネリック - 混合型での共用体と単体テスト

共用体について

Go ジェネリックスの共用体は、次の目的で使用できる型のセットを表します。ジェネリック型パラメータを制約します。これらはインターフェイス制約でのみ使用され、ジェネリック型パラメーター T が共用体に含まれる型のみを受け入れることができることを示します。

単体テストでの共用体の使用

ジェネリック関数の単体テストを作成する場合、さまざまなタイプを使用してテストするという課題に直面する可能性があります。あなたの場合、同じテーブル テスト内で int と文字列の両方を使用して Difference 関数をテストすることを目的としていました。

intOrString インターフェイスが失敗する理由

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

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