欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Go開(kāi)發(fā)Struct轉(zhuǎn)換成map兩種方式比較

 更新時(shí)間:2018年07月23日 10:01:25   作者:小歪子go  
本篇文章主要介紹了詳解Go開(kāi)發(fā)Struct轉(zhuǎn)換成map兩種方式比較,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

最近做Go開(kāi)發(fā)的時(shí)候接觸到了一個(gè)新的orm第三方框架gorose,在使用的過(guò)程中,發(fā)現(xiàn)沒(méi)有類(lèi)似beego進(jìn)行直接對(duì)struct結(jié)構(gòu)進(jìn)行操作的方法,有部分API是通過(guò)map進(jìn)行數(shù)據(jù)庫(kù)相關(guān)操作,那么就需要我們把struct轉(zhuǎn)化成map,下面是是我嘗試兩種不同struct轉(zhuǎn)換成map的方法

mport (
  "encoding/json"
  "fmt"
  "reflect"
  "time"
)

type Persion struct {
  Id    int
  Name   string
  Address string
  Email  string
  School  string
  City   string
  Company string
  Age   int
  Sex   string
  Proviece string
  Com   string
  PostTo  string
  Buys   string
  Hos   string
}

func main() {
  StructToMapViaJson()
  //StructToMapViaReflect()
}

func StructToMapViaJson() {
  m := make(map[string]interface{})
  t := time.Now()
  person := Persion{
    Id:    98439,
    Name:   "zhaondifnei",
    Address: "大沙地",
    Email:  "dashdisnin@126.com",
    School:  "廣州第十五中學(xué)",
    City:   "zhongguoguanzhou",
    Company: "sndifneinsifnienisn",
    Age:   23,
    Sex:   "F",
    Proviece: "jianxi",
    Com:   "廣州蘭博基尼",
    PostTo:  "藍(lán)鯨XXXXXXXX",
    Buys:   "shensinfienisnfieni",
    Hos:   "zhonsndifneisnidnfie",
  }
  j, _ := json.Marshal(person)
  json.Unmarshal(j, &m)
  fmt.Println(m)
  fmt.Println(time.Now().Sub(t))
}

一、通過(guò)struct轉(zhuǎn)json,json轉(zhuǎn)成map

func StructToMapViaJson() {
  m := make(map[string]interface{})
  t := time.Now()
  person := Persion{
    Id:    98439,
    Name:   "zhaondifnei",
    Address: "大沙地",
    Email:  "dashdisnin@126.com",
    School:  "廣州第十五中學(xué)",
    City:   "zhongguoguanzhou",
    Company: "sndifneinsifnienisn",
    Age:   23,
    Sex:   "F",
    Proviece: "jianxi",
    Com:   "廣州蘭博基尼",
    PostTo:  "藍(lán)鯨XXXXXXXX",
    Buys:   "shensinfienisnfieni",
    Hos:   "zhonsndifneisnidnfie",
  }
  j, _ := json.Marshal(person)
  json.Unmarshal(j, &m)
  fmt.Println(m)
  fmt.Printf("duration:%d", time.Now().Sub(t))
}

output:
map[Proviece:jianxi Com:廣州蘭博基尼 Hos:zhonsndifneisnidnfie Name:zhaondifnei Company:sndifneinsifnienisn Buys:shensinfienisnfieni Age:23 PostTo:藍(lán)鯨XXXXXXXX Address:大沙地 School:廣州第十五中學(xué) City:zhongguoguanzhou Sex:F Id:98439 Email:dashdisnin@126.com]
duration:250467

二、通過(guò)反射形式生成map

func StructToMapViaReflect() {
  m := make(map[string]interface{})
  t := time.Now()
  person := Persion{
    Id:    98439,
    Name:   "zhaondifnei",
    Address: "大沙地",
    Email:  "dashdisnin@126.com",
    School:  "廣州第十五中學(xué)",
    City:   "zhongguoguanzhou",
    Company: "sndifneinsifnienisn",
    Age:   23,
    Sex:   "F",
    Proviece: "jianxi",
    Com:   "廣州蘭博基尼",
    PostTo:  "藍(lán)鯨XXXXXXXX",
    Buys:   "shensinfienisnfieni",
    Hos:   "zhonsndifneisnidnfie",
  }
  elem := reflect.ValueOf(&person).Elem()
  relType := elem.Type()
  for i := 0; i < relType.NumField(); i++ {
    m[relType.Field(i).Name] = elem.Field(i).Interface()
  }
  fmt.Println(m)
  fmt.Printf("duration:%d", time.Now().Sub(t))
}

output:
map[Buys:shensinfienisnfieni Name:zhaondifnei City:zhongguoguanzhou Sex:F Proviece:jianxi Com:廣州蘭博基尼 Id:98439 School:廣州第十五中學(xué) Address:大沙地 Age:23 PostTo:藍(lán)鯨XXXXXXXX Hos:zhonsndifneisnidnfie Email:dashdisnin@126.com Company:sndifneinsifnienisn]
duration:104239

結(jié)論

通過(guò)比較可以看出,通過(guò)反射的形式轉(zhuǎn)換基本上是通過(guò)json形式轉(zhuǎn)換的兩倍。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Go語(yǔ)言轉(zhuǎn)換所有字符串為大寫(xiě)或者小寫(xiě)的方法

    Go語(yǔ)言轉(zhuǎn)換所有字符串為大寫(xiě)或者小寫(xiě)的方法

    這篇文章主要介紹了Go語(yǔ)言轉(zhuǎn)換所有字符串為大寫(xiě)或者小寫(xiě)的方法,實(shí)例分析了ToLower和ToUpper函數(shù)的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Go連接并操作SQLite數(shù)據(jù)庫(kù)基本步驟

    Go連接并操作SQLite數(shù)據(jù)庫(kù)基本步驟

    在這篇文章中,我們將詳細(xì)描述如何在?Go?語(yǔ)言中使用?SQLite?數(shù)據(jù)庫(kù),我們將會(huì)從如何在?Go?中安裝和使用?SQLite?驅(qū)動(dòng)包開(kāi)始講起,然后逐步介紹如何創(chuàng)建數(shù)據(jù)庫(kù)連接,執(zhí)行?SQL?查詢(xún),處理返回的數(shù)據(jù)以及關(guān)閉數(shù)據(jù)庫(kù)連接
    2024-01-01
  • GoLang調(diào)用鏈可視化go-callvis使用介紹

    GoLang調(diào)用鏈可視化go-callvis使用介紹

    與鏈路追蹤(Tracing)不同,Tracing關(guān)注復(fù)雜的分布式環(huán)境中各個(gè)服務(wù)節(jié)點(diǎn)間的調(diào)用關(guān)系,主要用于服務(wù)治理。而我們本次探索的代碼調(diào)用鏈路則是代碼方法級(jí)別的調(diào)用關(guān)系,主要用于代碼設(shè)計(jì)
    2023-02-02
  • Go構(gòu)建器模式構(gòu)建復(fù)雜對(duì)象方法實(shí)例

    Go構(gòu)建器模式構(gòu)建復(fù)雜對(duì)象方法實(shí)例

    本文介紹了構(gòu)建器模式,如何通過(guò)構(gòu)建器對(duì)象構(gòu)建復(fù)雜業(yè)務(wù)對(duì)象的方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Go語(yǔ)言L(fǎng)eetCode題解961在長(zhǎng)度2N的數(shù)組中找出重復(fù)N次元素

    Go語(yǔ)言L(fǎng)eetCode題解961在長(zhǎng)度2N的數(shù)組中找出重復(fù)N次元素

    這篇文章主要為大家介紹了Go語(yǔ)言L(fǎng)eetCode題解961在長(zhǎng)度2N的數(shù)組中找出重復(fù)N次元素示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • golang操作Redis的實(shí)現(xiàn)示例

    golang操作Redis的實(shí)現(xiàn)示例

    本文主要介紹了golang操作Redis的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • Go?iota關(guān)鍵字與枚舉類(lèi)型實(shí)現(xiàn)原理

    Go?iota關(guān)鍵字與枚舉類(lèi)型實(shí)現(xiàn)原理

    這篇文章主要介紹了Go?iota關(guān)鍵字與枚舉類(lèi)型實(shí)現(xiàn)原理,iota是go語(yǔ)言的常量計(jì)數(shù)器,只能在常量的表達(dá)式中使用,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-07-07
  • 一文詳解golang通過(guò)io包進(jìn)行文件讀寫(xiě)

    一文詳解golang通過(guò)io包進(jìn)行文件讀寫(xiě)

    這篇文章主要介紹了golang通過(guò)io包進(jìn)行文件讀寫(xiě)文中有詳細(xì)的代碼示例。對(duì)學(xué)習(xí)或工資有很好的幫助,需要的小伙伴可以參考閱讀一下
    2023-04-04
  • go語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲的方法

    go語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲的方法

    這篇文章主要介紹了go語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲的方法,實(shí)例分析了Go語(yǔ)言流程判斷與處理的技巧,需要的朋友可以參考下
    2015-03-03
  • Go語(yǔ)言中的指針運(yùn)算實(shí)例分析

    Go語(yǔ)言中的指針運(yùn)算實(shí)例分析

    這篇文章主要介紹了Go語(yǔ)言中的指針運(yùn)算技巧,實(shí)例分析了Go語(yǔ)言指針運(yùn)算的實(shí)現(xiàn)方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02

最新評(píng)論