如何在Go 中為數值類型建立泛型函數
作為JavaScript 和TypeScript 用戶,您可能想知道如何在Go 中處理數值型別使用int 和float 時。本文探討了創建可以接受任何數值參數的泛型函數的最佳方法。
Go 1.18 以上版本中的泛型函數
隨著類型參數的引入Go 1.18,您現在可以定義以類型 T 參數化的函數。利用介面約束,您可以將T 限制為數字
func add[T Number](a, b T) T { return a + b }
這裡,約束Number 是使用golang.org/x/exp/constraints 套件定義的:
type Number interface { constraints.Integer | constraints.Float }
這個約束確保T 必須是一個型別滿足constraints.Integer或constraints.Float。
使用泛型函數
這個通用的 add 函數可以處理任何數字類型的參數。但是,請務必注意,兩個參數必須屬於同一類型。例如:
fmt.Println(add(1, 2)) // 3 fmt.Println(add(a, b)) // 3 fmt.Println(add(1.5, 3.2)) // 4.7
嘗試混合類型,例如 add(2.5, 2),將導致編譯錯誤。
複數支持
您可以擴展數字約束以包括複雜的types:
type Number interface { constraints.Integer | constraints.Float | constraints.Complex }
儘管複雜類型支持,算術運算符、-- 、* 和/ 仍然是唯一受支援的運算子。複雜類型不支援模 % 和位元運算符。
以上是如何在 Go 中編寫數值類型的泛型函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!