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不支持泛型嗎?的詳細內容,更多請關注創新互聯其它相關文章!
當前文章:go語言支持泛型嗎-創新互聯
URL分享:http://m.kartarina.com/article20/cdcpjo.html
成都網站建設公司_創新互聯,為您提供靜態網站、營銷型網站建設、響應式網站、全網營銷推廣、企業網站制作、微信小程序
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯