泛型在 Go 中的應用場景:集合運算:建立適用於任何類型的集合運算,例如篩選。資料結構:編寫通用的資料結構,如佇列,堆疊和映射,可儲存和操作各種類型的資料。演算法:編寫通用的演算法,如排序,搜尋和歸約,可處理不同類型的資料。
泛型是Go 1.18 中引入的一項重大特性,它允許我們在類型系統中使用類型變數。這為程式碼重複使用和減少冗餘提供了強大的功能,特別是在實現通用的資料結構或演算法時。
使用泛型,我們可以輕鬆建立適用於任何類型 T 的集合運算。例如:
func Filter[T any](slice []T, pred func(T) bool) []T { var filtered []T for _, v := range slice { if pred(v) { filtered = append(filtered, v) } } return filtered }
泛型可以幫助我們編寫通用的資料結構,例如佇列、堆疊或映射。這些數據結構可以儲存和操作各種類型的數據,提供更大的靈活性。
type Queue[T any] struct { items []T } func (q *Queue[T]) Enqueue(item T) { q.items = append(q.items, item) } func (q *Queue[T]) Dequeue() T { item := q.items[0] q.items = q.items[1:] return item }
泛型也允許我們編寫通用的演算法,例如排序、搜尋或歸約操作。這些演算法可以處理不同類型的數據,確保程式碼重用性和可維護性。
func Sort[T any](slice []T) []T { sort.Slice(slice, func(i, j int) bool { return slice[i] < slice[j] }) return slice }
考慮一個包含不同類型資料的Customer
結構:
type Customer struct { ID int Name string Age int Score float64 }
我們可以用泛型來寫一個通用的SortCustomers
函數,根據任意欄位對客戶進行排序:
func SortCustomers[T comparable](customers []Customer, field T) []Customer { sort.Slice(customers, func(i, j int) bool { return customers[i][field] < customers[j][field] }) return customers }
該函數可以根據客戶ID、姓名、年齡或分數進行排序,如下所示:
sortedByID := SortCustomers(customers, customers[0].ID) sortedByName := SortCustomers(customers, customers[0].Name)
以上是golang中泛型的具體應用場景的詳細內容。更多資訊請關注PHP中文網其他相關文章!