在 Go 中,一個常見的需求是有一個對不同類型的資料進行操作的函數。以計算特定類型切片中元素數量的函數為例。如何設計這個函數來處理任何類型的數據,而不僅僅是它最初設計的特定類型?
一種方法是使用接口,它本質上是定義類型必須的一組方法的契約實現以符合接口。透過使用介面作為方法參數,我們可以編寫可以與實現所需介面的任何類型一起使用的泛型函數。
考慮以下範例,我們的目標是建立一個計算元素數量的泛型Count 函數在切片中:
func Count[T any](s []T) int {
return len(s)
}
使用這樣的泛型,我們可以將任何類型的切片傳遞給 Count,使其能夠根據輸入類型動態地對元素進行計數。
此外,我們可以利用介面來實作泛型方法用於特定任務。例如,我們可以使用GetID 方法定義一個Identifying 接口,並建立一個通用FindByID 函數,該函數根據ID 值在切片中搜尋元素,而不管切片元素的實際類型如何:
type Identifiable interface {
GetID() int
}
func FindByID[T Identifiable](s []T, id int) *T {
for i, v := range s {
if v.GetID() == id {
return &s[i]
}
}
return nil
}
透過合併介面和泛型,我們能夠創建高度靈活且可以對各種類型的資料進行有效操作的函數。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3