成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:195日期:2024-05-29 11:29:18
目錄公共代碼區域一、map, struct 互轉1.map 轉 struct2、struct 轉 map二、struct, json 互轉三、map, json 互轉1.map 轉 json2.json 轉 map總結

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

公共代碼區域

package mainimport ( '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 UserInfoVofunc init() { User = UserInfoVo{ Id: '01', UserName: '酒窩豬', Address: []AddressVo{ { Address: '湖南', }, { Address: '北京', }, }, }}一、map, struct 互轉1.map 轉 struct

map 轉 struct 有兩種方式1.是通過第三方包 github.com/mitchellh/mapstructure2.通過 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µsresutlt: {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µsmap[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µsmap[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µsmap[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 內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产一区二区不卡在线 | 精品一区二区在线观看| 粉嫩在线一区二区三区视频| 99综合精品| 精品免费一区二区三区| 一二三四社区欧美黄| 成人丝袜高跟foot| 一本一道综合狠狠老| **性色生活片久久毛片| 国产98色在线|日韩| 色哟哟精品一区| 日韩美女精品在线| 成人午夜大片免费观看| 在线中文字幕一区二区| 亚洲免费看黄网站| www.色精品| 久久黄色影院| 亚洲天天做日日做天天谢日日欢| 成人夜色视频网站在线观看| 在线观看成人小视频| 亚洲三级在线免费| 色综合一区二区| 制服丝袜成人动漫| 青青青爽久久午夜综合久久午夜| 亚洲黄页一区| 国产欧美日韩视频一区二区| 国产一区二区在线看| 久久久夜精品| 亚洲精品第1页| 欧美午夜精品久久久久免费视| 91精品久久久久久久99蜜桃| 视频一区在线播放| 欧美激情一级片一区二区| 欧美sm美女调教| 韩国av一区二区三区在线观看 | 亚洲国产日本| wwww国产精品欧美| 高清beeg欧美| 88在线观看91蜜桃国自产| 老司机午夜精品99久久| 久久人人97超碰人人澡爱香蕉 | 欧美日本高清视频在线观看| 天天综合日日夜夜精品| 亚洲少妇在线| 亚洲人快播电影网| 国模 一区 二区 三区| ww久久中文字幕| 国产精品综合久久| 欧美日韩国产a| 亚洲国产二区| 自拍av一区二区三区| 国内精品**久久毛片app| 国产目拍亚洲精品99久久精品| 成人高清伦理免费影院在线观看| 日韩视频一区在线观看| 国产毛片一区二区| 欧美另类一区二区三区| 久久66热re国产| 欧美婷婷六月丁香综合色| 日本伊人色综合网| 欧美视频在线一区| 精油按摩中文字幕久久| 91久久精品日日躁夜夜躁欧美| 男男视频亚洲欧美| 亚洲专区在线| 亚欧色一区w666天堂| 久久天堂成人| 亚洲丰满少妇videoshd| 国产一区二区你懂的| 亚洲自拍欧美精品| 亚洲一区二区三区免费观看 | 国产乱人伦偷精品视频免下载| 欧美日韩国产一二三| 国产在线国偷精品产拍免费yy| 欧美另类高清zo欧美| 成人黄色国产精品网站大全在线免费观看| 91精品免费观看| 成人国产精品免费观看视频| 久久夜色精品国产欧美乱极品| 波波电影院一区二区三区| 久久久久免费观看| 国内精品久久国产| 亚洲一区中文在线| 色综合激情久久| 六月丁香婷婷久久| 日韩欧美国产系列| 99久久国产免费看| 精品久久人人做人人爽| av爱爱亚洲一区| 国产精品三级av| 亚洲国产日韩欧美| 午夜精品久久久久久久蜜桃app| 美女视频免费一区| 精品久久久久一区二区国产| 午夜精品视频| 亚洲综合在线免费观看| 91久久精品一区二区三| 国产成人午夜精品影院观看视频| www国产成人| 亚洲乱码久久| 免费观看在线综合| 日韩欧美国产综合一区| 91丨九色丨蝌蚪丨老版| 亚洲美女少妇撒尿| 色欧美片视频在线观看| 精品一区二区三区视频| 精品久久久久久久久久久久包黑料 | 在线观看福利一区| 天堂久久久久va久久久久| 7878成人国产在线观看| 午夜激情一区| 亚洲成a人v欧美综合天堂下载| 欧美体内she精高潮| 成人免费看的视频| 日韩理论电影院| 欧美午夜电影网| 91麻豆国产在线观看| 一区二区三区四区激情| 9191久久久久久久久久久| 国产精品yjizz| 麻豆精品久久久| 亚洲国产精品v| 91福利视频网站| 午夜日韩av| 日韩电影在线免费看| 2020国产精品| 久久精品五月| 99久久综合精品| 丝袜亚洲另类丝袜在线| 日韩精品一区二区三区视频 | 国产成人综合亚洲91猫咪| 中文字幕日韩av资源站| 欧美性猛交xxxx黑人交| 99国产精品国产精品久久| 亚洲国产精品欧美一二99| 日韩欧美国产一区二区在线播放 | 国产精品全国免费观看高清 | 久久精品综合网| 美女国产精品| 97精品久久久久中文字幕| 亚洲电影视频在线| 久久久青草青青国产亚洲免观| 免费亚洲网站| 成人av资源下载| 视频一区二区三区入口| 久久综合久久久久88| 欧美亚洲网站| 99在线视频精品| 欧美日韩高清一区二区| 亚洲国产精选| 成人一区二区三区在线观看| 午夜激情一区二区| 中文字幕精品一区二区精品绿巨人| 日本道在线观看一区二区| 欧美另类亚洲| 国内久久婷婷综合| 亚洲午夜三级在线| 久久综合久久99| 国产一区二区福利视频| 午夜伦理一区二区| 国产日韩精品一区二区三区| 在线电影一区二区三区| 亚洲精品三级| 91在线视频官网| 久久精品国产99国产精品| 亚洲桃色在线一区| 久久久亚洲综合| 精品视频一区二区三区免费| 国产欧美亚洲一区| 欧美精品亚洲| 成人蜜臀av电影| 久草热8精品视频在线观看| 一区二区三区国产精华| 国产欧美一区二区精品秋霞影院| 欧美精品国产精品| 性xx色xx综合久久久xx| 国产主播一区| 91在线精品秘密一区二区| 国内成人精品2018免费看| 亚洲午夜久久久久久久久电影网| 国产精品美女视频| 91成人免费网站| 久久大香伊蕉在人线观看热2| 国内精品久久久久久久97牛牛| 不卡的电视剧免费网站有什么| 欧美日韩黄视频| 亚洲在线播放电影| 99精品久久久| 在线看片一区| 欧美福利专区| 成a人片国产精品| 国产精品亚洲一区二区三区在线| 日本特黄久久久高潮| 香港成人在线视频| 亚洲激情自拍视频| 国产精品色婷婷久久58| 久久久久国产精品麻豆ai换脸 | 一本色道久久加勒比精品| 亚洲精品日韩精品| 亚洲日韩视频|