首頁  >  文章  >  後端開發  >  golang不支援泛型嗎?

golang不支援泛型嗎?

(*-*)浩
(*-*)浩原創
2019-12-13 14:26:553423瀏覽

golang不支援泛型嗎?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn