濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 詳解Go開(kāi)發(fā)Struct轉(zhuǎn)換成map兩種方式比較

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

熱門標(biāo)簽:惠州電銷防封電話卡 汕頭小型外呼系統(tǒng) 黃岡人工智能電銷機(jī)器人哪個(gè)好 阿里云ai電話機(jī)器人 濱州自動(dòng)電銷機(jī)器人排名 建造者2地圖標(biāo)注 浙江高頻外呼系統(tǒng)多少錢一個(gè)月 鄭州亮點(diǎn)科技用的什么外呼系統(tǒng) 釘釘有地圖標(biāo)注功能嗎

最近做Go開(kāi)發(fā)的時(shí)候接觸到了一個(gè)新的orm第三方框架gorose,在使用的過(guò)程中,發(fā)現(xiàn)沒(mé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í)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • golang struct 實(shí)現(xiàn) interface的方法
  • golang中struct和interface的基礎(chǔ)使用教程
  • 淺談Go語(yǔ)言中的結(jié)構(gòu)體struct & 接口Interface & 反射
  • 詳解Angular之constructor和ngOnInit差異及適用場(chǎng)景
  • 詳解Angular 中 ngOnInit 和 constructor 使用場(chǎng)景
  • golang struct擴(kuò)展函數(shù)參數(shù)命名警告解決方法
  • 解析Go語(yǔ)言編程中的struct結(jié)構(gòu)
  • Golang學(xué)習(xí)筆記(六):struct
  • Go語(yǔ)言中struct的匿名屬性特征實(shí)例分析
  • Go語(yǔ)言struct類型介紹
  • Go語(yǔ)言struct類型詳解

標(biāo)簽:滄州 晉中 泰安 駐馬店 阿壩 昭通 瀘州 東營(yíng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Go開(kāi)發(fā)Struct轉(zhuǎn)換成map兩種方式比較》,本文關(guān)鍵詞  詳解,開(kāi)發(fā),Struct,轉(zhuǎn),換成,;如發(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)文章
  • 下面列出與本文章《詳解Go開(kāi)發(fā)Struct轉(zhuǎn)換成map兩種方式比較》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于詳解Go開(kāi)發(fā)Struct轉(zhuǎn)換成map兩種方式比較的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    黔西县| 襄城县| 家居| 印江| 十堰市| 贵阳市| 郑州市| 永康市| 朝阳市| 永平县| 蕉岭县| 乌拉特后旗| 迁西县| 漳平市| 定结县| 澜沧| 临汾市| 原阳县| 资中县| 尉氏县| 高雄县| 通化市| 昌宁县| 上饶县| 安达市| 湾仔区| 长葛市| 大港区| 威信县| 德阳市| 平邑县| 繁昌县| 长武县| 许昌市| 姜堰市| 阿拉善左旗| 常熟市| 东台市| 中西区| 阜新市| 乌审旗|