Go 語言中的函數泛型
泛型函數允許您為各種類型定義通用函數,從而提高代碼的可重用性和靈活性。
語法
泛型函數的語法如下:
func <函數名>[T any](<參數列表>) <返回值類型> { // 函數體 }
登錄后復制
其中:
<函數名>
是泛型函數的名稱。<T any>
表示函數接受的類型參數,any
關鍵字指示類型未知。<參數列表>
是函數所需的參數。<返回值類型>
是函數返回的類型。
實戰案例
我們創建一個比較兩個值并返回較大值的泛型函數:
func Max[T comparable](a, b T) T { if a > b { return a } return b }
登錄后復制
我們可以使用此函數比較任何可比較類型的兩個值:
maxInt := Max(10, 20) // int maxString := Max("hello", "world") // string
登錄后復制
約束
您可以使用類型約束來限制函數可以接受的類型。例如,您可以要求類型必須可比較或實現特定接口:
func MaxComparable[T comparable](a, b T) T func MaxWithInterface[T any](a, b T) T where T interface{ CompareTo(T) int }
登錄后復制
注意
泛型與反射使用相同的元信息機制,如果過度使用可能會降低性能。
泛型類型實例化會產生新的類型,這可能會增加內存開銷。
結論
Go 語言中的函數泛型提供了強大的工具,可用于編寫通用且可重用的代碼。通過使用類型參數和類型約束,您可以創建適應多種情況的函數。