婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > golang struct, map, json之間的相互轉換

golang struct, map, json之間的相互轉換

熱門標簽:400手機電話免費辦理 武漢百應人工智能電銷機器人 開通400電話申請流程 智能語音電銷的機器人 如何利用高德地圖標注家 電腦外呼系統輻射大嗎 百度地圖標注位置網站 上海企業外呼系統排名 揚州電銷外呼系統軟件

本文用于記錄我在 golang 學習階段遇到的類型轉換問題,針對的是 json 、map、struct 之間相互轉換的問題,用到的技術 json 、mapstructure、reflect 三個類庫

公共代碼區域

package main

import (
 "encoding/json"
 "fmt"
 "testing"
)

type UserInfoVo struct {
 Id   string `json:"id"`
 UserName string `json:"user_name"`
 Address []AddressVo `json:"address"`
}

type AddressVo struct {
 Address string `json:"address"`
}

var beforeMap = map[string]interface{}{
 "id":        "123",
 "user_name": "酒窩豬",
 "address":   []map[string]interface{}{{"address": "address01"}, {"address": "address02"}},
}

var User UserInfoVo

func init() {
 User = UserInfoVo{
  Id:       "01",
  UserName: "酒窩豬",
  Address: []AddressVo{
   {
    Address: "湖南",
   },
   {
    Address: "北京",
   },
  },
 }
}

一、map, struct 互轉

1.map 轉 struct

map 轉 struct 有兩種方式
1.是通過第三方包 github.com/mitchellh/mapstructure
2.通過 map 轉 json,再通過 json 轉 struct

第三方包 mapstructure

下載依賴,通過第三方依賴進行轉換

go get github.com/goinggo/mapstructure

func TestMapToStructByMod(t *testing.T) {
 var afterStruct =UserInfoVo{}
 before := time.Now()
 err := mapstructure.Decode(beforeMap, afterStruct)
 if err!=nil{
  fmt.Println(err)
 }
 fmt.Printf("result:%+v \n",time.Since(before))
 fmt.Printf("result:%+v \n",afterStruct)
}

result:61.757µs
result:{Id:123 UserName: Address:[{Address:address01} {Address:address02}]}
--- PASS: TestMapToStructByMod (0.00s)
PASS

通過 JSON 進行轉換

先將 map 轉換成 JSON,再通過 JSON 轉換成 struct
操作有點繁瑣

func TestMapToStructByJson(t *testing.T) {
 beforeMap := map[string]interface {}{
  "id":"123",
  "user_name":"酒窩豬",
  "address":[]map[string]interface{}{{"address": "address01"}, {"address": "address02"}},
 }
 var afterStruct =UserInfoVo{}
 before := time.Now()
 marshal, err := json.Marshal(beforeMap)
 if err!=nil{
  fmt.Println("marshal:",err)
  return
 }
 err = json.Unmarshal(marshal, afterStruct)
 if err!=nil{
  fmt.Println("unmarshal:",err)
  return
 }
 fmt.Println(time.Since(before))
 fmt.Printf("resutlt: %+v",afterStruct)
}

134.299µs
resutlt: {Id:123 UserName:酒窩豬 Address:[{Address:address01} {Address:address02}]}--- PASS: TestMapToStructByJson (0.00s)
PASS

總結
問題:
論性能哪個更佳?

根據結果答案
使用 JSON 需要時間是 134.299µs
使用 mapstructure 需要時間是 61.757µs
結果是使用第三方包 mapstructure 性能更好,那么,是因為什么呢?暫且按下不表

2、struct 轉 map

JSON 序列化轉換

先將 struct 轉換成字節數組,再將字節數組轉換成 map 打印

func TestStructToMapByJson(t *testing.T) {
 var resultMap interface{}
 before := time.Now()
 jsonMarshal, _ := json.Marshal(User)
 err := json.Unmarshal(jsonMarshal, resultMap)
 if err != nil {
  fmt.Println(err)
  return
 }
 fmt.Println(time.Since(before))
 fmt.Printf("%+v",resultMap)
}

158.857µs
map[address:[map[address:湖南] map[address:北京]] id:01 user_name:酒窩豬]--- PASS: TestStructToMapByJson (0.00s)
PASS

通過反射轉換

通過反射獲取 User 的類型與值

func TestStructToMapByReflect(t *testing.T) {
 var resultMap = make(map[string]interface{},10)
 before := time.Now()

 ty:=reflect.TypeOf(User)
 v:=reflect.ValueOf(User)
 for i := 0; i  v.NumField(); i++ {
  resultMap[strings.ToLower(ty.Field(i).Name)]=v.Field(i).Interface()
 }
 fmt.Println(time.Since(before))
 fmt.Printf("%+v",resultMap)
}

13.965µs
map[address:[{Address:湖南} {Address:北京}] id:01 username:酒窩豬]--- PASS: TestStructToMapByReflect (0.00s)
PASS

總結
問題:論性能哪個更佳?

答案是使用反射的效果更快點,沒有那么多繁瑣的轉換,記住在 make 中進行初始化大小,我試了下,不指定大小與指定大小時間上有 3~4µs 的區別
網絡上還有一種方法是使用 structs 包,不過我看了下,該依賴包已經三年沒更新了

二、struct, json 互轉

1. struct 轉 json

func TestStructToJsonByJson(t *testing.T) {
 before := time.Now()
 marshal, _ := json.Marshal(User)
 fmt.Println(time.Since(before))
 fmt.Printf("%s", marshal)
}

116.068µs
{"id":"01","user_name":"酒窩豬","address":[{"address":"湖南"},{"address":"北京"}]}--- PASS: TestStructToJsonByJson (0.00s)
PASS

2.json 轉 struct

func TestJsonToStructByJson(t *testing.T) {
 info:=UserInfoVo{}
 marshal, _ := json.Marshal(User)
 before := time.Now()
 json.Unmarshal(marshal,info)
 fmt.Println(time.Since(before))
 fmt.Printf("%+v",info)
}

23.009µs
{Id:01 UserName:酒窩豬 Address:[{Address:湖南} {Address:北京}]}--- PASS: TestJsonToStructByJson (0.00s)
PASS

三、map, json 互轉

1.map 轉 json

func TestMapToJson(t *testing.T) {
 before := time.Now()
 marshal, _ := json.Marshal(beforeMap)
 fmt.Println(time.Since(before))
 fmt.Printf("%s", marshal)
}

75.133µs
{"address":[{"address":"address01"},{"address":"address02"}],"id":"123","user_name":"酒窩豬"}--- PASS: TestMapToJson (0.00s)
PASS

2.json 轉 map

func TestJsonToMap(t *testing.T) {
 marshal, _ := json.Marshal(beforeMap)
 resultMap:=make(map[string]interface{},10)
 before := time.Now()
 json.Unmarshal(marshal,resultMap)
 fmt.Println(time.Since(before))
 fmt.Printf("%+v", resultMap)
}

28.728µs
map[address:[map[address:address01] map[address:address02]] id:123 user_name:酒窩豬]--- PASS: TestJsonToMap (0.00s)
PASS

總結

三者之間的轉換更多的是關于如果使用 json 內庫,只有在 map 轉 struct 使用了 mapstructure,struct 轉 map 使用了反射,其他轉換,更多的是使用 json 內置庫進行轉換

到此這篇關于golang struct, map, json之間的相互轉換的文章就介紹到這了,更多相關golang struct, map, json 內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

您可能感興趣的文章:
  • react組件中的constructor和super知識點整理
  • MapStruct到底是什么?
  • Go遍歷struct,map,slice的實現
  • golang 生成對應的數據表struct定義操作
  • Java MapStruct解了對象映射的毒
  • Go 使用Unmarshal將json賦給struct出錯的原因及解決
  • C#調用C類型dll入參為struct的問題詳解
  • Java Structs框架原理案例詳解

標簽:張掖 武漢 延邊 嘉峪關 宜賓 新余 黑龍江 江西

巨人網絡通訊聲明:本文標題《golang struct, map, json之間的相互轉換》,本文關鍵詞  golang,struct,map,json,之,間的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang struct, map, json之間的相互轉換》相關的同類信息!
  • 本頁收集關于golang struct, map, json之間的相互轉換的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久久五月婷婷| 国产曰批免费观看久久久| 精品黑人一区二区三区久久| 麻豆成人在线观看| 色哦色哦哦色天天综合| 久久精品亚洲一区二区三区浴池| 五月天激情综合网| 欧美婷婷六月丁香综合色| 中文字幕亚洲区| 97久久超碰精品国产| 精品动漫一区二区三区在线观看| 欧美韩国一区二区| 久久 天天综合| 免费一级片91| 日韩西西人体444www| 免费在线一区观看| 精品国产精品网麻豆系列| 国产在线一区观看| 中文字幕成人av| 91尤物视频在线观看| 亚洲激情图片小说视频| 欧美性极品少妇| 久久国产精品无码网站| 久久久夜色精品亚洲| 成人永久免费视频| 亚洲自拍与偷拍| 日韩视频一区在线观看| 久久www免费人成看片高清| 在线不卡一区二区| 日本一区二区三区久久久久久久久不 | 欧美午夜片在线看| 欧美成人激情免费网| 日韩欧美高清一区| 制服丝袜亚洲网站| 日韩激情中文字幕| 精品理论电影在线| 色女孩综合影院| 一区二区三区成人在线视频| 日韩一区中文字幕| 五月天久久比比资源色| xnxx国产精品| 91麻豆国产精品久久| 人人爽香蕉精品| 亚洲精品国久久99热| 精品国产亚洲在线| 欧美丝袜丝nylons| 不卡一区在线观看| 精品在线视频一区| 91国偷自产一区二区使用方法| 久国产精品韩国三级视频| 亚洲国产精品一区二区尤物区| 国产日韩三级在线| www一区二区| 911国产精品| 欧美午夜视频网站| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 五月天激情综合| 国产亚洲一区二区三区四区| 欧美区在线观看| 一本一道久久a久久精品| 国产一区二区h| 日本va欧美va欧美va精品| 亚洲欧洲日韩女同| 色88888久久久久久影院野外| av激情综合网| 日韩美女啊v在线免费观看| 精品一区二区成人精品| 日本va欧美va精品发布| 欧美刺激午夜性久久久久久久| 欧美综合视频在线观看| 亚洲国产va精品久久久不卡综合| 国产精品一区二区在线观看网站| 蜜臀av在线播放一区二区三区| 日本不卡高清视频| 国产精品911| 中文字幕免费观看一区| 国产精品无码永久免费888| 久久久久久久久蜜桃| 国产一区二区影院| 国产成人丝袜美腿| 久久综合丝袜日本网| 欧美不卡一区二区| 免费视频一区二区| 欧美日韩一区二区三区在线看| 国产精品一二二区| 国产精品久久久久久久岛一牛影视| 激情都市一区二区| 久久看人人爽人人| 欧美日韩一区二区在线观看| 欧美日韩一区二区三区不卡| 亚洲午夜国产一区99re久久| 亚洲激情在线播放| 欧美肥妇毛茸茸| 久久久久国产精品麻豆ai换脸 | 免费在线观看视频一区| 久久久91精品国产一区二区三区| 一区二区三区在线不卡| 最好看的中文字幕久久| 亚洲va国产天堂va久久en| 亚洲欧洲一区二区在线播放| 99综合影院在线| 久久综合网色—综合色88| 中文字幕av一区二区三区免费看| 亚洲主播在线观看| 盗摄精品av一区二区三区| 岛国精品在线播放| 日本韩国欧美一区二区三区| 亚洲国产精品一区二区www在线| 奇米影视一区二区三区小说| 国产午夜精品一区二区三区视频| 久久爱www久久做| 亚洲资源在线观看| 国产精品中文字幕日韩精品| 欧美一区二区观看视频| 精品成a人在线观看| 亚洲精品在线三区| 色88888久久久久久影院野外| 欧美日韩国产综合久久| 国产亚洲欧洲997久久综合| 久久亚洲一区二区三区明星换脸| 天天综合色天天综合色h| 国产性色一区二区| 欧美日韩精品电影| 青青草国产精品97视觉盛宴| 91色.com| 欧美一区午夜视频在线观看| 男女性色大片免费观看一区二区| 亚洲制服欧美中文字幕中文字幕| 日韩国产在线一| 天堂成人国产精品一区| 日韩电影在线看| 国产成人在线电影| 韩国女主播一区二区三区| 亚洲免费观看在线视频| 国产精品亚洲人在线观看| 欧洲av在线精品| 日韩欧美一二区| 日韩一区二区三区电影| 亚洲一级不卡视频| 91看片淫黄大片一级在线观看| 欧美成人r级一区二区三区| 婷婷成人综合网| 欧美男生操女生| 国产精品 欧美精品| 欧美一区二区三区视频在线观看| 91精品国产手机| 日韩欧美一二区| 亚洲欧美怡红院| 国产精一品亚洲二区在线视频| 欧美伦理影视网| 亚洲自拍偷拍网站| 在线免费观看成人短视频| 久久久综合精品| 狠狠色伊人亚洲综合成人| 欧美色男人天堂| 亚洲综合在线电影| 色婷婷激情综合| 福利一区二区在线| 91同城在线观看| 日韩欧美中文字幕一区| |精品福利一区二区三区| 成人蜜臀av电影| 国产精品第13页| 国产在线精品一区二区夜色 | 欧美国产综合一区二区| 国产精品久久精品日日| 久久夜色精品一区| 成人免费毛片aaaaa**| 国产精品久久久久久户外露出| 成人av在线资源网| 亚洲人成网站精品片在线观看| 麻豆精品精品国产自在97香蕉| 欧美疯狂做受xxxx富婆| 日韩电影一区二区三区| 精品国产免费久久| 国产在线精品免费| 国产日韩欧美不卡| 成人精品视频网站| 肉肉av福利一精品导航| 日韩一区二区不卡| 捆绑变态av一区二区三区| 日韩免费在线观看| 久久成人久久爱| 欧美亚洲免费在线一区| 欧美亚洲国产bt| 亚洲最大成人综合| 日韩精品一区二区三区视频在线观看| 三级在线观看一区二区| 欧美国产在线观看| 在线91免费看| 岛国一区二区在线观看| 一二三区精品视频| 亚洲mv大片欧洲mv大片精品| 久久人人97超碰com| 国产成人精品网址| 亚洲一区在线播放| 国产精品久久久久久久久久久免费看 | 欧美精选在线播放| 久久久久久久精| 色偷偷久久人人79超碰人人澡|