好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > golang的序列化與反序列化的幾種方式

golang的序列化與反序列化的幾種方式

熱門標簽:谷歌美發店地圖標注 江蘇呼叫中心外呼系統有效果嗎 赤峰電銷 地圖區域圖標注后導出 貴州電話智能外呼系統 官渡電銷外呼管理系統怎么收費 杭州人工智能電銷機器人費用 利用地圖標注位置 400開頭電話怎樣申請

golang用來序列化的模塊有很多,我們來介紹3個。

json

首先登場的是json,這個幾乎毋庸置疑。

序列化

package main

import (
 "encoding/json"
 "fmt"
)

type Girl struct {
 Name string
 Age int
 Gender string
 Where string
 Is_married bool
}

func main() {
 g := Girl{"satori", 16, "f","東方地靈殿", false}

 //可以直接使用json.Marshal,但是打印出來不好看,這里加上縮進
 ret, err := json.MarshalIndent(g, "", " ")
 if err != nil {
 fmt.Println(err)
 } else {
 //得到的是字節數組,需要轉化成string
 fmt.Println(string(ret))
 /*
 {
  "Name": "satori",
  "Age": 16,
  "Gender": "f",
  "Where": "東方地靈殿",
  "Is_married": false
 }
 */
 }
}

當然golang的大小寫我們知道是具有含義的,如果改成小寫, 那么該字段是無法被序列化的。但是這樣序列化之后的字段,也是大寫,如果我們就想要小寫該怎么辦呢?

package main

import (
 "encoding/json"
 "fmt"
)

type Girl struct {
 //使用`json:"xxx"`相當于起了一個別名xxx,以后序列化出來的字段就叫這個名字,
 Name string `json:"name"`
 Age int `json:"age"`
 Gender string `json:"gender"`
 Where string `json:"where"`
 Is_married bool `json:"is_married"`
}

func main() {
 g := Girl{"satori", 16, "f","東方地靈殿", false}

 ret, err := json.MarshalIndent(g, "", " ")
 if err != nil {
 fmt.Println(err)
 } else {
 fmt.Println(string(ret))
 /*
 {
  "name": "satori",
  "age": 16,
  "gender": "f",
  "where": "東方地靈殿",
  "is_married": false
 }
 */
 }
}

反序列化

package main

import (
 "encoding/json"
 "fmt"
)

type Girl struct {
 Name string `json:"name"`
 Age int `json:"age"`
 Gender string `json:"gender"`
 Where string `json:"where"`
 Is_married bool `json:"is_married"`
}

func main() {
 g := Girl{"satori", 16, "f","東方地靈殿", false}

 ret, err := json.MarshalIndent(g, "", " ")
 if err != nil {
 fmt.Println(err)
 return
 }

 //創建一個變量
 g2 := Girl{}
 //傳入json字符串,和指針
 err = json.Unmarshal(ret, g2)
 if err != nil {
 fmt.Println(err)
 }
 fmt.Println(g2) //{satori 16 f 東方地靈殿 false}
 fmt.Println(g2.Name, g2.Age) // satori 16
}

gob

標準庫gob是golang提供的“私有”的編解碼方式,它的效率會比json,xml等更高,特別適合在Go語言程序間傳遞數據。

序列化

package main

import (
 "bytes"
 "encoding/gob"
 "fmt"
)

type Girl struct {
 Name    string
 Age    int  `json:"age"`
 Gender   string `json:"gender"`
 Where   string `json:"where"`
 Is_married bool  `json:"is_married"`
}

func main() {
 g := Girl{"satori", 16, "f", "東方地靈殿", false}

 //創建緩存
 buf := new(bytes.Buffer)
 //把指針丟進去
 enc := gob.NewEncoder(buf)

 //調用Encode進行序列化
 if err := enc.Encode(g); err != nil {
 fmt.Println(err)
 return
 } else {
 //序列化的內容會被放進buf里面
 fmt.Println(buf.String())
 /*
 G��Girl�� Name Age Gender Where 
 Is_married  !��satori f東方地靈殿
 */
 }
}

發現是亂碼,因為這類似python的pickle,是該語言獨有的。所以我們不認識沒關系,golang認識就行了

反序列化

package main

import (
 "bytes"
 "encoding/gob"
 "fmt"
)

type Girl struct {
 Name    string
 Age    int  `json:"age"`
 Gender   string `json:"gender"`
 Where   string `json:"where"`
 Is_married bool  `json:"is_married"`
}

func main() {
 g := Girl{"satori", 16, "f", "東方地靈殿", false}

 buf := new(bytes.Buffer)
 enc := gob.NewEncoder(buf)
 if err := enc.Encode(g);err != nil {
 fmt.Println(err)
 return
 }

 var g1 = Girl{}
 //bytes.NewBuffer和bytes.Buffer類似,只不過可以傳入一個初始的byte數組,返回一個指針
 dec := gob.NewDecoder(bytes.NewBuffer(buf.Bytes()))
 //調用Decode方法,傳入結構體對象指針,會自動將buf.Bytes()里面的內容轉換成結構體
 if err := dec.Decode(g1);err != nil {
 fmt.Println(err)
 return
 } else {
 fmt.Println(g1) // {satori 16 f 東方地靈殿 false}
 }
}

msgpack

MessagePack是一種高效的二進制序列化格式。它允許你在多種語言(如JSON)之間交換數據。但它更快更小。

安裝

go get -u github.com/vmihailenco/msgpack

序列化和反序列化

接口和json是一致的

package main

import (
 "fmt"
 "github.com/vmihailenco/msgpack"
)

type Girl struct {
 Name    string
 Age    int  `json:"age"`
 Gender   string `json:"gender"`
 Where   string `json:"where"`
 Is_married bool  `json:"is_married"`
}

func main() {
 g := Girl{"satori", 16, "f", "東方地靈殿", false}

 //這個沒有MarshalIndent
 if ret, err := msgpack.Marshal(g); err != nil {
 fmt.Println(err)
 return
 } else {
 fmt.Println(string(ret)) //��Name�satori�Age�    �Gender�f�Where�東方地靈殿�Is_married�
 var g1 = Girl{}
 if err := msgpack.Unmarshal(ret, g1);err!=nil {
  fmt.Println(err)
  return
 } else {
  fmt.Println(g1) // {satori 16 f 東方地靈殿 false}
 }
 }
}

到此這篇關于golang的序列化與反序列化的幾種方式的文章就介紹到這了,更多相關golang 序列化與反序列化內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • golang中的net/rpc包使用概述(小結)
  • go語言net包rpc遠程調用的使用示例
  • Golang Gob編碼(gob包的使用詳解)

標簽:鷹潭 宜春 黔西 松原 武漢 河池 泰安 保定

巨人網絡通訊聲明:本文標題《golang的序列化與反序列化的幾種方式》,本文關鍵詞  golang,的,序列化,與,反,幾種,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang的序列化與反序列化的幾種方式》相關的同類信息!
  • 本頁收集關于golang的序列化與反序列化的幾種方式的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 张开腿让我尿在里面(h)| 隔壁搬来黑人中文字幕| 91亚州熟女激情Av| 黃色A片三級三級三級免费看泰山 香港一级爽快片婬片A片免费 | 黑人狂躁日本妞| 小芳的性纵欲日记1~5集| 韩国电影《浴室吃奶》在线观看| 男男跪下屁股扒开调教| 黑人一级毛片| 国产精品对白刺激在线观看| JUQ-378人妻秘書汗と接吻| 99国产欧美久久精品| 扒开双腿猛进高潮喷水| 99热免费精品| 66人体美女大胆大尺度写真| 又黄又刺激的激情小故事| 51成人免费动漫在线| 美妇后菊交换| 国产欧美一区二区三区小说| 玖欧美性生交XXXXX无码| 我的yin荡女友1-19| 好男人在线社区www免费看| 香港古装三级装在线观看| 色娜娜精品视频在线播放| 国产熟妇婬乱A片免费看牛牛| 性俄罗斯交XXXXX免费视频| 国产乱理论片在线观看理论| 日本japanese超丰满| 亚洲欧洲日韩在线| 色橹橹欧美在线观看高清视频| 08年阿娇未处理大尺度视频| 德国性做爰A片免费看| 三蒲惠理作品在线观看| 亚洲成a人v欧美综合天堂软件| 热99re久久国超精品首页| 免费成人黄色片| 91精品国产综合久久久蜜臀粉嫩| 制服丝袜一区二区三区,| 女的下面无遮挡蔽黄污图gif| 亚洲视频免费观看| 在线香蕉视频|