您好,登錄后才能下訂單哦!
Golang團隊認為在類型系統和運行時的復雜性花費太大,還沒找到可以和這個復雜性相抵的良好設計。
內置的map和slice其實都有泛型的味道,加上可以用interface{}來構造容器,可以達到泛型的效果。所以目前為止還沒有直接的支持泛型。
我們這里打算以一些例子來講解Golang中如何處理這個問題。
首先,我們看一個冒泡排序的問題。針對整型數組切片的排序。
package main import ( "fmt" ) func bubbleSort(array []int) { for i := 0; i < len(array); i++ { for j := 0; j < len(array)-i-1; j++ { if array[j] > array[j+1] { array[j], array[j+1] = array[j+1], array[j] } } } } func main() { a1 := []int{3, 2, 6, 10, 7, 4, 6, 5} bubbleSort(a1) fmt.Println(a1) }
上面的例子輸出為:
[2 3 4 5 6 6 7 10]
那么,我們如果希望這個bubbleSort能夠同時支持float類型數據排序,或者是按照字符串的長度來排序應該怎么做呢?
在其他的例如java語言中,我們可以將bubbleSort定義為支持泛型的排序,但是Go里面就不行了。為了達到這個目的,我們可以使用interface來實現相同的功能。
針對上面的排序問題,我們可以分析一下排序的步驟:
查看切片長度,以用來遍歷元素(Len);
比較切片中的兩個元素(Less);
根據比較的結果決定是否交換元素位置(Swap)。
到這里,或許你已經明白了,我們可以把上面的函數分解為一個支持任意類型的接口,任何其他類型的數據只要實現了這個接口,就可以用這個接口中的函數來排序了。
以上就是golang不支持泛型嗎?的詳細內容,更多請關注億速云其它相關文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。