首頁 > 後端開發 > Golang > 如何在 Go 中編寫數值類型的泛型函數?

如何在 Go 中編寫數值類型的泛型函數?

Barbara Streisand
發布: 2024-12-18 00:00:14
原創
666 人瀏覽過

How to Write a Generic Function for Numerical Types in Go?

如何在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中文網其他相關文章!

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