ホームページ >バックエンド開発 >Golang >テストの型制約で Go ジェネリック ユニオンを効果的に使用するにはどうすればよいですか?

テストの型制約で Go ジェネリック ユニオンを効果的に使用するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-19 21:42:11966ブラウズ

How Can I Effectively Use Go Generics Unions in Type Constraints for Testing?

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

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