校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > golang struct, map, json之間的相互轉(zhuǎn)換

golang struct, map, json之間的相互轉(zhuǎn)換

熱門標(biāo)簽:400手機(jī)電話免費(fèi)辦理 武漢百應(yīng)人工智能電銷機(jī)器人 開(kāi)通400電話申請(qǐng)流程 智能語(yǔ)音電銷的機(jī)器人 如何利用高德地圖標(biāo)注家 電腦外呼系統(tǒng)輻射大嗎 百度地圖標(biāo)注位置網(wǎng)站 上海企業(yè)外呼系統(tǒng)排名 揚(yáng)州電銷外呼系統(tǒng)軟件

本文用于記錄我在 golang 學(xué)習(xí)階段遇到的類型轉(zhuǎn)換問(wèn)題,針對(duì)的是 json 、map、struct 之間相互轉(zhuǎn)換的問(wèn)題,用到的技術(shù) json 、mapstructure、reflect 三個(gè)類庫(kù)

公共代碼區(qū)域

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 互轉(zhuǎn)

1.map 轉(zhuǎn) struct

map 轉(zhuǎn) struct 有兩種方式
1.是通過(guò)第三方包 github.com/mitchellh/mapstructure
2.通過(guò) map 轉(zhuǎn) json,再通過(guò) json 轉(zhuǎn) struct

第三方包 mapstructure

下載依賴,通過(guò)第三方依賴進(jìn)行轉(zhuǎn)換

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

通過(guò) JSON 進(jìn)行轉(zhuǎn)換

先將 map 轉(zhuǎn)換成 JSON,再通過(guò) JSON 轉(zhuǎn)換成 struct
操作有點(diǎn)繁瑣

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

總結(jié)
問(wèn)題:
論性能哪個(gè)更佳?

根據(jù)結(jié)果答案
使用 JSON 需要時(shí)間是 134.299µs
使用 mapstructure 需要時(shí)間是 61.757µs
結(jié)果是使用第三方包 mapstructure 性能更好,那么,是因?yàn)槭裁茨兀繒呵野聪虏槐?/p>

2、struct 轉(zhuǎn) map

JSON 序列化轉(zhuǎn)換

先將 struct 轉(zhuǎn)換成字節(jié)數(shù)組,再將字節(jié)數(shù)組轉(zhuǎn)換成 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

通過(guò)反射轉(zhuǎn)換

通過(guò)反射獲取 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

總結(jié)
問(wèn)題:論性能哪個(gè)更佳?

答案是使用反射的效果更快點(diǎn),沒(méi)有那么多繁瑣的轉(zhuǎn)換,記住在 make 中進(jìn)行初始化大小,我試了下,不指定大小與指定大小時(shí)間上有 3~4µs 的區(qū)別
網(wǎng)絡(luò)上還有一種方法是使用 structs 包,不過(guò)我看了下,該依賴包已經(jīng)三年沒(méi)更新了

二、struct, json 互轉(zhuǎn)

1. struct 轉(zhuǎn) 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 轉(zhuǎn) 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 互轉(zhuǎn)

1.map 轉(zhuǎn) 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 轉(zhuǎn) 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

總結(jié)

三者之間的轉(zhuǎn)換更多的是關(guān)于如果使用 json 內(nèi)庫(kù),只有在 map 轉(zhuǎn) struct 使用了 mapstructure,struct 轉(zhuǎn) map 使用了反射,其他轉(zhuǎn)換,更多的是使用 json 內(nèi)置庫(kù)進(jìn)行轉(zhuǎn)換

到此這篇關(guān)于golang struct, map, json之間的相互轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)golang struct, map, json 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

您可能感興趣的文章:
  • react組件中的constructor和super知識(shí)點(diǎn)整理
  • MapStruct到底是什么?
  • Go遍歷struct,map,slice的實(shí)現(xiàn)
  • golang 生成對(duì)應(yīng)的數(shù)據(jù)表struct定義操作
  • Java MapStruct解了對(duì)象映射的毒
  • Go 使用Unmarshal將json賦給struct出錯(cuò)的原因及解決
  • C#調(diào)用C類型dll入?yún)閟truct的問(wèn)題詳解
  • Java Structs框架原理案例詳解

標(biāo)簽:張掖 武漢 延邊 嘉峪關(guān) 宜賓 新余 黑龍江 江西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang struct, map, json之間的相互轉(zhuǎn)換》,本文關(guān)鍵詞  golang,struct,map,json,之,間的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang struct, map, json之間的相互轉(zhuǎn)換》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于golang struct, map, json之間的相互轉(zhuǎn)換的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲精品欧美激情| 337p粉嫩大胆色噜噜噜噜亚洲| 国产精品乱子久久久久| 国产成人精品免费| 中文字幕亚洲在| 欧美日韩视频在线第一区| 水野朝阳av一区二区三区| 91精品啪在线观看国产60岁| 精品一二三四区| 中文字幕 久热精品 视频在线| 99国产精品久| 同产精品九九九| 精品国产一区二区三区av性色 | 久久精品亚洲精品国产欧美 | 欧美人妖巨大在线| 久久精品国产亚洲一区二区三区| 久久奇米777| 欧美在线|欧美| 美女www一区二区| 成人欧美一区二区三区视频网页| 欧美日本高清视频在线观看| 国产一区在线看| 樱花影视一区二区| 精品免费一区二区三区| av一区二区久久| 麻豆精品一二三| 亚洲免费av高清| 日韩精品在线看片z| 色偷偷久久人人79超碰人人澡| 天堂午夜影视日韩欧美一区二区| 国产夜色精品一区二区av| 欧美在线观看视频在线| 国产不卡在线视频| 免费视频最近日韩| 亚洲欧美日韩国产成人精品影院| 欧美v日韩v国产v| 色8久久精品久久久久久蜜| 久久成人免费网| 亚洲国产美国国产综合一区二区| 国产日韩精品视频一区| 欧美一区二区三区在线观看视频| av亚洲产国偷v产偷v自拍| 精油按摩中文字幕久久| 亚洲成人黄色小说| 亚洲视频一区在线观看| 精品国产乱码久久久久久蜜臀| 在线观看视频一区二区欧美日韩| 国产精品一区二区黑丝| 日韩成人精品在线观看| 亚洲人成7777| 国产精品久久久久一区二区三区 | 色婷婷综合五月| 成人性生交大片免费看在线播放| 日韩精品国产欧美| 一区二区三区在线免费| 国产精品久久久久aaaa樱花 | 欧美日韩高清不卡| 色哟哟欧美精品| 99久久国产综合精品色伊| 激情欧美一区二区| 日韩黄色一级片| 婷婷中文字幕一区三区| 亚洲一区视频在线| 亚洲女人****多毛耸耸8| 国产精品久久久久三级| 欧美激情在线一区二区三区| 久久夜色精品国产噜噜av| 日韩美一区二区三区| 欧美肥妇毛茸茸| 91麻豆精品国产91久久久久久久久| 91在线视频18| 91日韩在线专区| 91小宝寻花一区二区三区| 91女厕偷拍女厕偷拍高清| 99久久精品一区| 大胆欧美人体老妇| 成人av网站在线| 99久久婷婷国产| 91日韩在线专区| 欧美亚州韩日在线看免费版国语版| 91浏览器打开| 欧美性videosxxxxx| 欧美日韩一区三区四区| 欧美精品乱码久久久久久按摩 | 色88888久久久久久影院按摩 | 在线不卡免费av| 欧美一级夜夜爽| 亚洲精品在线一区二区| 国产视频一区不卡| 国产精品麻豆99久久久久久| 亚洲三级电影网站| 一区二区三区精品久久久| 首页国产丝袜综合| 九九精品视频在线看| 成人福利电影精品一区二区在线观看| 99久久免费国产| 欧美午夜片在线看| 日韩欧美一区二区视频| 久久久高清一区二区三区| 国产精品美女久久久久久| 亚洲精品你懂的| 伦理电影国产精品| 成人免费视频视频在线观看免费 | 日本韩国视频一区二区| 欧美视频完全免费看| 精品国产乱码久久久久久久久| 亚洲国产精品国自产拍av| 亚洲一区在线电影| 狠狠v欧美v日韩v亚洲ⅴ| 91影视在线播放| 欧美精品电影在线播放| 久久久久久9999| 亚洲成人在线观看视频| 国产一区二区三区电影在线观看| 99久久精品一区| 日韩精品专区在线影院观看| 中文字幕视频一区| 美国毛片一区二区三区| 91麻豆国产福利在线观看| 日韩欧美一级片| 亚洲自拍偷拍欧美| 国产大片一区二区| 欧美久久久久久久久久| 国产精品入口麻豆九色| 美腿丝袜亚洲一区| 色综合久久久久综合99| 久久美女艺术照精彩视频福利播放 | 欧美性色欧美a在线播放| 久久免费美女视频| 婷婷开心激情综合| 成人av手机在线观看| 日韩亚洲电影在线| 亚洲精品免费在线观看| 国产黄色精品网站| 欧美电影在线免费观看| 亚洲欧美中日韩| 国产在线视频不卡二| 欧美疯狂做受xxxx富婆| 一区二区三区中文在线观看| 成人高清伦理免费影院在线观看| 精品免费视频.| 日本在线不卡视频| 欧美在线不卡一区| 亚洲人成网站精品片在线观看| 国产99精品在线观看| 欧美成人精品福利| 天天操天天干天天综合网| 色先锋资源久久综合| 国产精品久久福利| 国产丶欧美丶日本不卡视频| 日韩精品自拍偷拍| 日产国产欧美视频一区精品 | 欧美电视剧免费全集观看| 亚洲va韩国va欧美va| 欧洲亚洲精品在线| 亚洲三级小视频| av不卡免费电影| 国产精品不卡视频| 成人激情开心网| 国产精品色眯眯| 成人久久视频在线观看| 国产欧美一区二区精品性色超碰| 激情五月婷婷综合| 日韩午夜在线观看视频| 蓝色福利精品导航| 日韩精品一区二区三区视频| 精品一区二区在线免费观看| 日韩视频免费观看高清完整版| 免费在线观看一区| 日韩欧美中文一区| 麻豆精品视频在线观看视频| 精品国产伦一区二区三区观看方式 | 国产成人精品午夜视频免费| 国产亚洲福利社区一区| 成人午夜精品在线| 中文字幕中文在线不卡住| 91玉足脚交白嫩脚丫在线播放| 亚洲乱码日产精品bd| 欧美视频在线不卡| 日韩成人免费看| 精品国产露脸精彩对白| 国产成人精品免费| 亚洲日本在线视频观看| 欧美色倩网站大全免费| 日韩黄色免费电影| 26uuu国产电影一区二区| 国产suv精品一区二区6| 一区二区三区在线观看网站| 欧美三级电影网站| 男女性色大片免费观看一区二区| 久久久久综合网| 色综合久久久久久久久久久| 日韩精品亚洲一区二区三区免费| 精品sm在线观看| 91在线观看美女| 麻豆国产精品视频| 亚洲特级片在线| 5858s免费视频成人| 国产精品99久久久久久久女警 | 日韩丝袜情趣美女图片|