第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么不能在 Go 中將 [Size]byte 轉(zhuǎn)換為字符串?

為什么不能在 Go 中將 [Size]byte 轉(zhuǎn)換為字符串?

Go
瀟湘沐 2021-09-13 09:49:20
我有一個大小的字節(jié)數(shù)組,我在做md5.Sum().data := []byte("testing")var pass string var b [16]byteb = md5.Sum(data)pass = string(b)錯誤:cannot convert b (type [16]byte) to type string我找到了這個問題的解決方案改成:pass = string(b[:])但是為什么不能這樣使用呢?pass = string(b)
查看完整描述

1 回答

?
HUWWW

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[:]))


查看完整回答
反對 回復(fù) 2021-09-13
  • 1 回答
  • 0 關(guān)注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號