1 回答

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個贊
簡短的回答是因?yàn)?Go 語言規(guī)范不允許這樣做。
引用Go 語言規(guī)范:轉(zhuǎn)換:
在以下任何一種情況下,非常量值x都可以轉(zhuǎn)換為類型T:
x可分配給T。
x的類型并T具有相同的基礎(chǔ)類型。
x的類型并且T是未命名的指針類型,并且它們的指針基類型具有相同的底層類型。
x 的類型并且T都是整數(shù)或浮點(diǎn)類型。
x 的類型并且T都是復(fù)雜類型。
x是一個整數(shù)或一個字節(jié)片或符文,并且T是一個字符串類型。
x是一個字符串,T是一個字節(jié)或符文的切片。
該規(guī)范僅允許將字節(jié)或符文切片轉(zhuǎn)換為string,但不允許將字節(jié)數(shù)組轉(zhuǎn)換為 。
長答案
在 Go 中,數(shù)組和切片是不同的類型。數(shù)組的大小是類型的一部分。
切片比數(shù)組更通用,將數(shù)組轉(zhuǎn)換為表示相同系列值的切片非常容易:(arr[:]而且也很便宜,結(jié)果切片將共享數(shù)組作為其后備數(shù)組,不會重新分配或復(fù)制完畢)。
因此,所有功能和支持都是為切片提供的,而不是為數(shù)組提供的。
只是想象你想創(chuàng)建一個簡單的函數(shù),它接受一個數(shù)字切片(任意長度)int并返回?cái)?shù)字的總和。像這樣的東西:
func sum(s []int) (sum int) {
for _, v := range s {
sum += v
}
return
}
如果您決定使用數(shù)組作為輸入,由于長度是類型的一部分,您將限制函數(shù)的可用性,它只能采用相同長度的數(shù)組:
func sum2(s [2]int) (sum int) {
for _, v := range s {
sum += v
}
return
}
你可以調(diào)用sum2()類型的值僅[2]int但如果你有類型的數(shù)組[3]int,你不能因?yàn)檫@些2種類型是不同的!sum2()如果您只有一個int's切片,您也無法調(diào)用(您無法訪問切片的后備數(shù)組)。同時,您可以sum()使用所有[]int切片調(diào)用您的函數(shù),如果您有一個數(shù)組,您仍然可以通過傳遞arr[:]給您的sum()函數(shù)來使用它。
筆記:
另請注意,將“隨機(jī)”字節(jié)切片轉(zhuǎn)換為 astring很可能不是您想要的,因?yàn)椤半S機(jī)”字節(jié)切片可能不是有效的 UTF-8 字節(jié)序列。
而是使用encoding/hex包將結(jié)果轉(zhuǎn)換為十六進(jìn)制字符串,如下所示:
fmt.Println(hex.EncodeToString(b[:]))
- 1 回答
- 0 關(guān)注
- 205 瀏覽
添加回答
舉報(bào)