Golang團隊認為在類型系統和運行時的複雜性花費太大,還沒找到可以和這個複雜性相抵的良好設計。
內建的map和slice其實都有泛型的味道,加上可以用interface{}來建構容器,可以達到泛型的效果。所以目前為止還沒有直接的支援泛型。 中下探索中對「如何去處理我們如何為一些問題來解決一些例子#3#3#]#Golang#Go3#Golang#Golang#GoD#GoD#GoD#GoD#GoD#GoD#GoD#GoD#GoD#Golang#GoD#GoD#GoD#GoD#GoD#GoD#GoD#GoD#GoD#GoD#可以處理。 首先,我們來看一個冒泡排序的問題。針對整數陣列切片的排序。
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不支援泛型嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!