go之二進位制協議gob和msgpack

2022-09-15 13:48:19 字數 1805 閱讀 9045

文章引用自

本文主要介紹二進位制協議gob及msgpack的基本使用。

最近在寫乙個gin框架的session服務時遇到了乙個問題,go語言中的json包在序列化空介面存放的數字型別(整型、浮點型等)都序列化成float64型別。

我們構造乙個結構體如下:

type s struct 

}

func jsondemo() , 8),

} s1.data["count"] = 1

ret, err := json.marshal(s1.data)

if err != nil

fmt.printf("%#v\n", string(ret))

var s2 = s, 8),

} err = json.unmarshal(ret, &s2.data)

if err != nil

fmt.println(s2)

for _, v := range s2.data

}

輸出結果:

""

value:1, type:float64

標準庫gob是golang提供的「私有」的編譯碼方式,它的效率會比json,xml等更高,特別適合在go語言程式間傳遞資料

func gobdemo() , 8),

} s1.data["count"] = 1

// encode

buf := new(bytes.buffer) // 建立乙個buffer區

enc := gob.newencoder(buf) // 建立新的需要轉化二進位制區域物件

err := enc.encode(s1.data) // 將資料轉化為二進位製流

if err != nil

b := buf.bytes() // 將二進位製流賦值給變數b

fmt.println(b)

var s2 = s, 8),

} // decode

dec := gob.newdecoder(bytes.newbuffer(b)) // 建立乙個物件 把需要轉化的物件放入

err = dec.decode(&s2.data) // 進行流轉化

if err != nil

fmt.println(s2.data)

for _, v := range s2.data

}

messagepack是一種高效的二進位制序列化格式。它允許你在多種語言(如json)之間交換資料。但它更快更小。

b, err := msgpack.marshal(p1) // 將結構體轉化為二進位製流

if err != nil

// unmarshal

var p2 person

err = msgpack.unmarshal(b, &p2) // 將二進位製流轉化回結構體

if err != nil

fmt.printf("p2:%#v\n", p2) // p2:main.person

}

二進位制協議gob和msgpack介紹

本文主要介紹二進位制協議gob及msgpack的基本使用。最近在寫乙個gin框架的session服務時遇到了乙個問題,go語言中的json包在序列化空介面存放的數字型別 整型 浮點型等 都序列化成float64型別。我們構造乙個結構體如下 type s struct func jsondemo 8 ...

032 二進位制協議gob及msgpack介紹

目錄 更新 更全的 go從入門到放棄 的更新 更有python go 人工智慧教學等著你 本文主要介紹二進位制協議gob及msgpack的基本使用。最近在寫乙個gin框架的session服務時遇到了乙個問題,go語言中的json包在序列化空介面存放的數字型別 整型 浮點型等 都序列化成float64...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...