首頁 > 後端開發 > Golang > 如何在聯合約束中有效地對具有混合類型的 Go 泛型函數進行單元測試?

如何在聯合約束中有效地對具有混合類型的 Go 泛型函數進行單元測試?

Patricia Arquette
發布: 2025-01-04 16:46:39
原創
977 人瀏覽過

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

Go 泛型- 混合類型的聯合和單元測試

理解聯合

Go 泛型中的聯合表示一組可用於約束泛型類型參數。它們僅用於介面約束,表示泛型類型參數 T 只能接受聯合中包含的類型。

在單元測試中使用聯合

在為泛型函數編寫單元測試時,您可能會遇到不同類型測試的挑戰。在您的例子中,您的目標是在同一個表測試中使用整數和字串來測試您的 Difference 函數。

為什麼 intOrString 介面失敗

您嘗試建立用於測試的 intOrString 介面約束時遇到了錯誤,因為 intOrString 不是有效類型。它是一個約束,將泛型類型參數 T 限制為 int 或 string。您不能使用類型約束直接實例化類型。

解決方案:使用通用容器

您應該將測試輸入和輸出切片聲明為泛型類型,而不是使用intOrString 約束intOrString 約束:

type testDifferenceInput[T intOrString] [][]T
type testDifferenceOutput[T intOrString] []T
登入後複製

但是,這種方法並不能完全解決您的問題。通用容器不能容納不同類型的物品。在您的測試切片中,您有兩種不同的類型:testDifference[int] 和 testDifference[string]。

按類型分隔切片

為了在單元測試中容納不同的類型,您可以將按類型切片:

ttInts := []testDifference[int]{
    // ... test cases for ints
}
ttStrs := []testDifference[string]{
    // ... test cases for strings
}
登入後複製

聯合操作約束

聯合操作約束聯合操作約束聯合操作約束聯合約束限制可以對泛型類型參數執行的操作。在 int | 的情況下字串,僅允許適用於這兩種類型的操作,例如比較、排序和加法(僅適用於字串)。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板