golang?用msgpack高效序列化的案例
msgpack
MessagePack是一種高效的二進(jìn)制序列化格式。它允許你在多種語言(如JSON)之間交換數(shù)據(jù)。但它更快更小。
golang 用msgpack高效序列化
package main
import (
"fmt"
"github.com/go-redis/redis"
"reflect"
"github.com/vmihailenco/msgpack"
)
// 聲明一個(gè)全局的rdb變量
var rdb *redis.Client
// 初始化連接
func initClient() (err error) {
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
_, err = rdb.Ping().Result()
if err != nil {
return err
}
return nil
}
type Test struct {
name string
}
func main() {
var countryCapitalMap map[string]string /*創(chuàng)建集合 */
countryCapitalMap = make(map[string]string)
/* map插入key - value對,各個(gè)國家對應(yīng)的首都 */
countryCapitalMap["France"] = "巴黎"
countryCapitalMap["Italy"] = "羅馬"
countryCapitalMap["Japan"] = "東京"
countryCapitalMap["India "] = "新德里"
fmt.Println("原數(shù)據(jù)-", countryCapitalMap)
//in := map[string]interface{}{"foo": uint32(123456789), "hello": "world"}
in := countryCapitalMap
res, err := msgpack.Marshal(in)
if err != nil {
fmt.Printf("序列化失敗")
}
//fmt.Sprintf("數(shù)據(jù)類型%T", b)
fmt.Println(reflect.TypeOf(res))
fmt.Println("序列化數(shù)據(jù)--", res)
//連接redis
initClient()
//存入redis數(shù)據(jù)類型[]type可以存入
bool := rdb.Set("val", res, 0).Err()
if bool != nil {
fmt.Printf("set val failed, err:%v\n", err)
return
}
//返回類型可變
val, err := rdb.Get("val").Bytes()
if err != nil {
fmt.Printf("get val failed, err:%v\n", err)
return
}
fmt.Println("redis取出數(shù)據(jù)--", val)
var out map[string]string
bool = msgpack.Unmarshal(val, &out)
if bool != nil {
fmt.Println("反序列化失敗")
}
fmt.Println("反序列化數(shù)據(jù)--", out)
}安裝
go get -u github.com/vmihailenco/msgpack
示例
package main
import (
? ? "fmt"
? ? "github.com/vmihailenco/msgpack"
)
// msgpack demo
type Person struct {
? ? Name ? string
? ? Age ? ?int
? ? Gender string
}
func main() {
? ? p1 := Person{
? ? ? ? Name: ? "沙河娜扎",
? ? ? ? Age: ? ?18,
? ? ? ? Gender: "男",
? ? }
? ? // marshal
? ? b, err := msgpack.Marshal(p1) // 將結(jié)構(gòu)體轉(zhuǎn)化為二進(jìn)制流
? ? if err != nil {
? ? ? ? fmt.Printf("msgpack marshal failed,err:%v", err)
? ? ? ? return
? ? }
? ? // unmarshal
? ? var p2 Person
? ? err = msgpack.Unmarshal(b, &p2) // 將二進(jìn)制流轉(zhuǎn)化回結(jié)構(gòu)體
? ? if err != nil {
? ? ? ? fmt.Printf("msgpack unmarshal failed,err:%v", err)
? ? ? ? return
? ? }
? ? fmt.Printf("p2:%#v\n", p2) // p2:main.Person{Name:"沙河娜扎", Age:18, Gender:"男"}
}到此這篇關(guān)于golang 用msgpack高效序列化的案例的文章就介紹到這了,更多相關(guān)golang msgpack序列化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang 獲取文件md5校驗(yàn)的方法以及效率對比
這篇文章主要介紹了Golang 獲取文件md5校驗(yàn)的方法以及效率對比,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05
go語言Pflag Viper Cobra 核心功能使用介紹
這篇文章主要為大家介紹了go語言Pflag Viper Cobra 核心功能使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
Go語言如何實(shí)現(xiàn)Benchmark函數(shù)
go想要在main函數(shù)中測試benchmark會(huì)麻煩一些,所以這篇文章主要為大家介紹了如何實(shí)現(xiàn)了一個(gè)簡單的且沒有開銷的benchmark函數(shù),希望對大家有所幫助2024-12-12
go local history本地歷史恢復(fù)代碼神器
這篇文章主要為大家介紹了go local history本地歷史恢復(fù)代碼神器的使用功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Go緩沖channel和非緩沖channel的區(qū)別說明
這篇文章主要介紹了Go緩沖channel和非緩沖channel的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
Golang中函數(shù)(Function)和方法(Method)的區(qū)別詳解
在Golang中,大家必然會(huì)頻繁使用到函數(shù)(Function)和方法(Method),但是有的同學(xué)可能并沒有注意過函數(shù)和方法的異同點(diǎn),函數(shù)和方法都是用來執(zhí)行特定任務(wù)的代碼塊,雖然很相似,但也有很大的區(qū)別,所以本文將詳細(xì)講解函數(shù)和方法的定義以及它們的異同點(diǎn)2023-07-07
Golang使用Gin框架實(shí)現(xiàn)HTTP響應(yīng)格式統(tǒng)一處理
在gin框架中,我們可以定義一個(gè)中間件來處理統(tǒng)一的HTTP響應(yīng)格式,本文主要為大家介紹了具體是怎么定義實(shí)現(xiàn)這樣的中間件的,感興趣的小伙伴可以了解一下2023-07-07

