首頁 >後端開發 >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 或字串。

為什麼不能將聯合用作類型?

帶有聯合的介面約束不是常規介面類型。這種區別是 Go 的泛型設計中有意為之的。

聯合約束允許的操作

使用帶有聯合約束的類型參數的函數只能執行每個成員允許的操作聯盟集。這包括:

  • 變數宣告
  • 轉換
  • 比較
  • 排序
  • 運算子
排序

運算子

適用於您問題

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
    }
}
您原來的方法使用 intOrString 作為類型,這是不允許的。若要正確使用聯合約束,請如下修改程式碼:

透過根據類型參數分隔測試案例,您可以解決通用容器無法容納不同項目的限制。類型。

以上是如何在類型約束中有效使用 Go 泛型聯合進行測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn