golang值類型轉換成[]uint8類型的操作
在go語言中,byte其實是uint8的別名,byte 和 uint8 之間可以直接進行互轉。
目前來只能將0~255范圍的int轉成byte。
func Int64ToBytes(num int64) []uint8 {
var buffer bytes.Buffer
err := binary.Write(&buffer, binary.BigEndian, num)
if err != nil {
logs.Error("int64轉[]uint8失敗%v", err)
}
return buffer.Bytes()
}
在使用binary.Write()的時候,要注意一些問題:
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.
我的翻譯是這樣的(本人英文不好,勿怪?。?/h2>
Write將數據的二進制表示形式寫入w。
數據必須是固定大小的值或固定大小的值的切片,或者是指向此類數據的指針
布爾值編碼為一個字節(jié):1表示true,0表示false。
寫入w的字節(jié)使用指定的字節(jié)順序進行編碼,并從數據的連續(xù)字段中讀取。
寫入結構時,將為空白(_)字段寫入零值名稱。
補充:golang關于json庫的一個比較容易陷入的坑 uint8[]數組的json轉換問題.
類似這個CA如果實例轉化成json.List會變成字符串.
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=="}
}
而我們希望的是要一個正常的json. 只有 int8 byte uint8 這種8位的json庫會給我們當成字符串處理.想要解決.如果拍腦袋就不能用這幾種類型了.需要使用16 32 64位的數字才可以正常轉換成json字符串.
{"List":[1,2,3,4,5,6,7,8,9,0]}
但是不用擔心. Unmarshal這個 我們認為不想要的json字符串 重新到CA的其他實例 會得到想要的結果.
如果是跨語言的json通信就要小心了.
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關文章
Golang通過SSH執(zhí)行交換機操作實現(xiàn)
這篇文章主要介紹了Golang通過SSH執(zhí)行交換機操作實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06
Go通過SJSON實現(xiàn)動態(tài)修改JSON
在Go語言 json 處理領域,在 json 數據處理中,讀取與修改是兩個核心需求,本文我們就來看看如何使用SJSON進行動態(tài)修改JSON吧,有需要的小伙伴可以了解下2025-03-03
golang數據結構之golang稀疏數組sparsearray詳解
這篇文章主要介紹了golang數據結構之golang稀疏數組sparsearray的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09
golang實現(xiàn)redis的延時消息隊列功能示例
這篇文章主要介紹了golang實現(xiàn)redis的延時消息隊列功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11

