久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      詳解Json序列化在golang中的應(yīng)用

      下面由golang教程欄目給大家詳解Json序列化在golang中的應(yīng)用 ,希望對(duì)需要的朋友有所幫助!

      詳解Json序列化在golang中的應(yīng)用

      關(guān)于我

      golang對(duì)json序列化和反序列化的操作實(shí)在是難受,所以說用習(xí)慣了高級(jí)語言特性,再轉(zhuǎn)到這些偏原生的寫法上就會(huì)很難受。

      不多BB,開始記錄。

      序列化庫的選擇

      當(dāng)寫個(gè)小demo或者做個(gè)小工具,沒有大規(guī)模使用場景,那使用哪個(gè)庫都是一樣的,因?yàn)樾阅艿捏w現(xiàn)并不會(huì)很明顯。但是如果是在實(shí)際項(xiàng)目中使用,且伴隨著高并發(fā),大容量等場景,我還是推薦使用json-iterator。

      go自帶json庫

      "encoding/json" 官當(dāng)自帶

      json-iterator

      號(hào)稱最快的go json解析器。跟官方的寫法兼容,我目前基本都使用這個(gè)。

      github.com/json-iterator/go

      效率對(duì)比

      ns 納秒 op 操作

      ns/op allocation bytes allocation times
      std decode 35510 ns/op 1960 B/op 99 allocs/op
      easyjson decode 8499 ns/op 160 B/op 4 allocs/op
      jsoniter decode 5623 ns/op 160 B/op 3 allocs/op
      std encode 2213 ns/op 712 B/op 5 allocs/op
      easyjson encode 883 ns/op 576 B/op 3 allocs/op
      jsoniter encode 837 ns/op 384 B/op 4 allocs/op

      編碼案例

      type Hero struct {     Name string     Age int     Birthday string     Sal float64     Skill string}

      序列化

      hero := Hero{     Name:     "小王",     Age:      20,     Birthday: "2021-02-23",     Sal:      88.02,     Skill:    "技能",}jsonStu, err := json.Marshalif err != nil {     fmt.Println("生成json字}fmt.Println(string(jsonStu))

      反序列化

      結(jié)構(gòu)體 struct

      str := "{"Name":"張三豐","Age":98,"Birthday":"2001-09-21","Sal":3800.85,"Skill":"武當(dāng)劍法"}" var hero Hero err := json.Unmarshal([]byte(str), &hero) if err != nil { fmt.Printf("unmarshal err=%vn", err) }

      結(jié)構(gòu)體數(shù)組

      倆種方式,一種直接反序列化成 結(jié)構(gòu)體數(shù)組,另一種反序列化為 slice,內(nèi)容為map[string]interface{}

      結(jié)構(gòu)體數(shù)組

      str := `[{"Name":"張三豐","Age":98,"Birthday":"2001-09-21","Sal":3800.85,"Skill":"武當(dāng)劍法"},{"Name":"張無忌","Age":28,"Birthday":"2004-09-21","Sal":300.85,"Skill":"乾坤大挪移"}]`  var hero []Hero err := json.Unmarshal([]byte(str), &hero) if err != nil { fmt.Printf("unmarshal err=%vn", err) } fmt.Printf("反序列化后 hero=%v", hero)

      slice

      str := `[{"Name":"張三豐","Age":98,"Birthday":"2001-09-21","Sal":3800.85,"Skill":"武當(dāng)劍法"},{"Name":"張無忌","Age":28,"Birthday":"2004-09-21","Sal":300.85,"Skill":"乾坤大挪移"}]`  //定義一個(gè)slice var slice []map[string]interface{} //注意:反序列化map,不需要make,因?yàn)閙ake操作被封裝到Unmarshal函數(shù) err := json.Unmarshal([]byte(str), &slice) if err != nil { fmt.Printf("unmarshal err=%vn", err) } fmt.Printf("反序列化后 slice=%vn", slice)

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)