Go開發Struct轉換成map兩種方式比較

最近做Go開發的時候接觸到了一個新的orm第三方框架gorose,在使用的過程中,發現沒有類似beego進行直接對struct結構進行操作的方法,有部分API是通過map進行數據庫相關操作,那么就需要我們把struct轉化成map,下面是是我嘗試兩種不同struct轉換成map的方法

mport ("encoding/json""fmt""reflect""time"
)type Persion struct {Id       intName     stringAddress  stringEmail    stringSchool   stringCity     stringCompany  stringAge      intSex      stringProviece stringCom      stringPostTo   stringBuys     stringHos      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:   "廣州第十五中學",City:     "zhongguoguanzhou",Company:  "sndifneinsifnienisn",Age:      23,Sex:      "F",Proviece: "jianxi",Com:      "廣州蘭博基尼",PostTo:   "藍鯨XXXXXXXX",Buys:     "shensinfienisnfieni",Hos:      "zhonsndifneisnidnfie",}j, _ := json.Marshal(person)json.Unmarshal(j, &m)fmt.Println(m)fmt.Println(time.Now().Sub(t))
}
一、通過struct轉json,json轉成map
func StructToMapViaJson() {m := make(map[string]interface{})t := time.Now()person := Persion{Id:       98439,Name:     "zhaondifnei",Address:  "大沙地",Email:    "dashdisnin@126.com",School:   "廣州第十五中學",City:     "zhongguoguanzhou",Company:  "sndifneinsifnienisn",Age:      23,Sex:      "F",Proviece: "jianxi",Com:      "廣州蘭博基尼",PostTo:   "藍鯨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:藍鯨XXXXXXXX Address:大沙地 School:廣州第十五中學 City:zhongguoguanzhou Sex:F Id:98439 Email:dashdisnin@126.com]
duration:250467

  

二、通過反射形式生成map
func StructToMapViaReflect() {m := make(map[string]interface{})t := time.Now()person := Persion{Id:       98439,Name:     "zhaondifnei",Address:  "大沙地",Email:    "dashdisnin@126.com",School:   "廣州第十五中學",City:     "zhongguoguanzhou",Company:  "sndifneinsifnienisn",Age:      23,Sex:      "F",Proviece: "jianxi",Com:      "廣州蘭博基尼",PostTo:   "藍鯨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:廣州第十五中學 Address:大沙地 Age:23 PostTo:藍鯨XXXXXXXX Hos:zhonsndifneisnidnfie Email:dashdisnin@126.com Company:sndifneinsifnienisn]
duration:104239

  結論

通過比較可以看出,通過反射的形式轉換基本上是通過json形式轉換的兩倍。



轉載于:https://www.cnblogs.com/dfsxh/p/10315442.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280525.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280525.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280525.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Hello, Raspberry Pi.

1.概要最近在研究自動升級開源項目的時候偶然想到IoT領域的自動升級&#xff0c;突然想起2016年買的樹莓派&#xff08;Raspberry Pi&#xff09;。那就分享一下如何入門樹莓派的教程&#xff0c;我當時一共買了兩塊一款是Raspberry Pi 3b&#xff08;2016年價格259元去年以抽獎…

supersu_SuperSU已從Play商店中刪除,這是替代使用的方法

supersuSuperSU has long been a staple in the rooted Android community. For years, the process for getting a rooted handset was: unlock the bootloader, flash a custom recovery, install SuperSU. That’s just how it was. 長期以來&#xff0c;SuperSU一直是扎根于…

Oracle 11g DRCP連接方式——基本原理

學習Oracle是一個復雜、繁瑣的過程。在浩如煙海的Oracle官方資料、新特性、MOS資料和各種Internal知識面前&#xff0c;我們總是覺得力不從心、不知所措。但是&#xff0c;這往往也就是我們不斷堅持、積累和追尋的樂趣。  在Oracle 11g中&#xff0c;提出了突破傳統專用/共享…

django項目開發1:搭建虛擬環境

需求 不同項目依賴不同模塊版本&#xff0c;不能共用一套環境&#xff0c;虛擬環境。在系統的python環境安裝 安裝 pip3 install virtualenv pip3 install virtualenvwrapper-win環境變量 # 配置環境變量&#xff1a; # 控制面板 > 系統和安全 > 系統 > 高級系統設…

IPC之——消息隊列

消息隊列作用&#xff1a; 可以用于兩個沒有聯系的進程間通信&#xff0c;創建一個消息隊列類似于打開了一個文件&#xff0c;兩個不同的進程都可以進行操作 消息隊列之函數介紹&#xff1a; 頭文件&#xff1a;<sys/type.h> <sys/ipc.h> <sys/msg.h> 1.msgg…

【招聘(上海)】To B數字化營銷公司-市場易,直招.NET后端研發工程師

【招聘背景】公司&#xff1a;上海光潾網絡科技有限公司成立于2016年&#xff0c;系上海市高新技術企業&#xff0c;2021年獲數千萬A輪融資項目&#xff1a;公司自主研發營銷自動化SaaS平臺- 市場易 (Custouch) &#xff0c;通過數字手段為B2B營銷賦能&#xff0c;現服務100多家…

div 包裹_如何查看到達之前收到的包裹和郵件

div 包裹The United States Postal Service, UPS, and FedEx all offer online dashboards where you can see exactly what packages (and letters, in the case of the US Postal Service) are scheduled to arrive at your address. They’ll even email and send you text …

py文件的運行

安裝過程及配置 安裝過程準備&#xff1a; 下載好Python的安裝程序后&#xff0c;開始安裝&#xff0c;在進入安裝界面后一定確保勾選將Python加入到系統環境變量的路徑里。如圖所示&#xff1a; 2如果沒有選取&#xff0c;那么按照下面的步驟進行操作。在桌面上用鼠標右鍵點擊…

加州大學信息科學院長:數據科學課程不只是工程師才修的

一般在考慮圍繞數據科學的基礎教育時&#xff0c;傳統上的重點仍停留在計算和工程等硬性技能上。不過&#xff0c;在周四于紐約市召開的GigaOm結構數據&#xff08;Structure Data&#xff09;會議上&#xff0c;美國加州大學伯克利分校信息科學院長AnnaLee Saxenian教授表示&a…

查看安裝軟件/Select-object/Where-Object xxx -like

查看已安裝軟件 1.通過注冊列表查看 $Path(HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*,HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*,HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*,HKCU:\SOFTWARE\WOW6432…

網絡編程基礎(一)

一.楔子 你現在已經學會了寫python代碼&#xff0c;假如你寫了兩個python文件a.py和b.py&#xff0c;分別去運行&#xff0c;你就會發現&#xff0c;這兩個python的文件分別運行的很好。但是如果這兩個程序之間想要傳遞一個數據&#xff0c;你要怎么做呢&#xff1f; 這個問題以…

dotnet-exec 讓 C# 程序更簡單

dotnet-exec 讓 C# 程序更簡單Introdotnet-exec是一個可以執行 C# 程序而不需要項目文件的命令行工具&#xff0c;并且你可以指定自定義的入口方法不僅僅是Main方法在 python/NodeJs 里&#xff0c;可以使用python xx.py/node xx.js來運行代碼&#xff0c;在 C# 中一般是需要項…

office數據集dslr_如何將照片從DSLR無線傳輸到智能手機

office數據集dslrYou’ve got a great digital camera. You’ve got all your social media apps on your phone. Wouldn’t it be nice if you could snap a beautiful shot with your DSLR and shuttle it right over to your phone to throw up on Facebook or Instagram? …

文件管理、命令別名和glob

一、復制命令:cp src dest1.如果scr是文件a.如果dest不存在&#xff0c;則新建dest并將src的內容填充到dest里b.如果dest存在&#xff0c;則會用src里的內容覆蓋dest里的內容&#xff0c;即覆蓋dest2.如果src是目錄a.如果dest不存在&#xff0c;則新建dest,然后把src下的內容復…

大數據匯聚全球精英

投資10億美元&#xff0c;選址貴安新區&#xff0c;建設iCloud服務的中國主數據中心。7月12日蘋果公司的這一舉動再次將全球目光聚集在貴州。 “貴州有令人矚目的增長&#xff0c;是中國新數據中心領域最具發展潛力的地點之一。”蘋果公司環境、政策和社會事務副總裁麗薩杰克遜…

django版本區別/與版本匹配

一、區別 路由層 1.django 1.x路由層使用url方法 django 2.x和3.x版本使用path方法 url() 第一個參數支持正則 path()第一個參數是不支持正則的 可以使用 re_path替代url() from django.urls import re_path # django2.0中的re_path #不建議導入url,不能區分版本 #from djang…

復制

ab,像這樣的復制&#xff0c;本質上a與b引用的是同一對象&#xff0c;當a改變時相應的b也會做出同樣的改變&#xff1b; 對于列表和字典這樣的容器對象分為&#xff1a;淺層復制blist(a)和深層復制bcopy.deepcopy(a) 淺層復制對對象共有的元素進行改變時同時改變&#xff1b; 深…

天坑,這樣一個lambda隨機取數據也有Bug

前幾天&#xff0c;一位網友跟我說他編寫的一段很簡單的代碼遇到了奇怪的Bug&#xff0c;他要達到的效果是從一個List中隨機取出來一條數據&#xff0c;代碼如下&#xff1a;var random new Random(); var users Enumerable.Range(0, 10).Select(p > new User(p, "A&…

中興面試一個星期沒有回音_如何在沒有回聲的情況下從亞馬遜獲取即時時尚建議...

中興面試一個星期沒有回音The Echo Look is a new device from Amazon that’s able to take a look at your outfits and tell you which one looks the best on you. However, you actually don’t need the Echo Look to get this kind of instant fashion advice from Amaz…

table分頁的簡單實現邏輯

為什么80%的碼農都做不了架構師&#xff1f;>>> //table分頁函數showPageNum: function(pageNum, allPageNum) { //pageNum點擊第幾頁&#xff0c;allPageNum總頁數$(".c_page .c_page_list").children().remove();for(var i1;i<allPageNum;i){var p…