golang值類型轉(zhuǎn)換成[]uint8類型的操作
在go語言中,byte其實(shí)是uint8的別名,byte 和 uint8 之間可以直接進(jìn)行互轉(zhuǎn)。
目前來只能將0~255范圍的int轉(zhuǎn)成byte。
func Int64ToBytes(num int64) []uint8 { var buffer bytes.Buffer err := binary.Write(&buffer, binary.BigEndian, num) if err != nil { logs.Error("int64轉(zhuǎn)[]uint8失敗%v", err) } return buffer.Bytes() }
在使用binary.Write()的時(shí)候,要注意一些問題:
Write writes the binary representation of data into w.
Data must be a fixed-size value or a slice of fixed-size // values, or a pointer to such data.
Boolean values encode as one byte: 1 for true, and 0 for false.
Bytes written to w are encoded using the specified byte order and read from successive fields of the data. When writing structs, zero values are written for fields with blank (_) field names.
我的翻譯是這樣的(本人英文不好,勿怪!)
Write將數(shù)據(jù)的二進(jìn)制表示形式寫入w。
數(shù)據(jù)必須是固定大小的值或固定大小的值的切片,或者是指向此類數(shù)據(jù)的指針
布爾值編碼為一個(gè)字節(jié):1表示true,0表示false。
寫入w的字節(jié)使用指定的字節(jié)順序進(jìn)行編碼,并從數(shù)據(jù)的連續(xù)字段中讀取。
寫入結(jié)構(gòu)時(shí),將為空白(_)字段寫入零值名稱。
補(bǔ)充:golang關(guān)于json庫的一個(gè)比較容易陷入的坑 uint8[]數(shù)組的json轉(zhuǎn)換問題.
類似這個(gè)CA如果實(shí)例轉(zhuǎn)化成json.List會(huì)變成字符串.
type CA struct { List []uint8 } func main() { ca := CA{[]uint8{1,2,3,4,5,6,7,8,9,0}} r, _ := json.Marshal(ca) fmt.Println(string(r)) //{"List":"AQIDBAUGBwgJAA=="} }
而我們希望的是要一個(gè)正常的json. 只有 int8 byte uint8 這種8位的json庫會(huì)給我們當(dāng)成字符串處理.想要解決.如果拍腦袋就不能用這幾種類型了.需要使用16 32 64位的數(shù)字才可以正常轉(zhuǎn)換成json字符串.
{"List":[1,2,3,4,5,6,7,8,9,0]}
但是不用擔(dān)心. Unmarshal這個(gè) 我們認(rèn)為不想要的json字符串 重新到CA的其他實(shí)例 會(huì)得到想要的結(jié)果.
如果是跨語言的json通信就要小心了.
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Golang異常處理之defer,panic,recover的使用詳解
這篇文章主要為大家介紹了Go語言異常處理機(jī)制中defer、panic和recover三者的使用方法,文中示例代碼講解詳細(xì),需要的朋友可以參考下2022-05-05golang 一次性定時(shí)器Timer用法及實(shí)現(xiàn)原理詳解
這篇文章主要為大家介紹了golang 一次性定時(shí)器Timer用法及實(shí)現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08golang實(shí)現(xiàn)簡單工廠、方法工廠、抽象工廠三種設(shè)計(jì)模式
這篇文章介紹了golang實(shí)現(xiàn)簡單工廠、方法工廠、抽象工廠三種設(shè)計(jì)模式的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04Go語言實(shí)現(xiàn)棧與隊(duì)列基本操作學(xué)家
go語言中,并沒有棧與隊(duì)列相關(guān)的數(shù)據(jù)結(jié)構(gòu),但是我們可以借助切片來實(shí)現(xiàn)棧與隊(duì)列的操作;接下來我們一起實(shí)現(xiàn)棧與隊(duì)列基本操作,感興趣的可以了解一下2022-11-11一文理解Goland協(xié)程調(diào)度器scheduler的實(shí)現(xiàn)
本文主要介紹了Goland協(xié)程調(diào)度器scheduler的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06