一、tag說明
先介紹一下``(反引號):反引號用來建立原生的字串字面量,這些字串可能由多行組成(不支援任何轉義序列),原生的字串字面量多用於書寫多行訊息、html以及正規表示式。
在處理json格式字串的時候,經常會看到宣告struct結構的時候,屬性的右側還有反引號括起來的內容。如下:
type user struct
要比較詳細的了解這個,要先了解一下golang的基礎,在golang中,命名都是推薦都是用駝峰方式,並且在首字母大小寫有特殊的語法含義:包外無法引用。但是由經常需要和其它的系統進行資料互動,例如轉成json格式,儲存到mongodb啊等等。這個時候如果用屬性名來作為鍵值可能不一定會符合專案要求。
所以呢就多了反引號的內容,在golang中叫標籤(tag),在轉換成其它資料格式的時候,會使用其中特定的字段作為鍵值。例如上例在轉成json格式:
u := &userj, _ := json.marshal(u)
fmt.println(string(j))
// 輸出內容:
如果在屬性中不增加標籤說明,則輸出:
可以看到直接用struct的屬性名做鍵值。
其中還有乙個bson的宣告,這個是用在將資料儲存到mongodb使用的。
二、tag獲取
那麼當我們需要自己封裝一些操作,需要用到tag中的內容時,如何去獲取呢?這邊可以使用反射包(reflect)中的方法來獲取:
package mainimport (
"encoding/json"
"fmt"
"reflect")
func main()
// 輸出json格式
u := &user
j, _ := json.marshal(u)
fmt.println(string(j)) // 輸出內容:
// 獲取tag中的內容
t := reflect.typeof(u)
field := t.elem().field(0)
fmt.println(field.tag.get("json")) // 輸出:user_id
fmt.println(field.tag.get("bson")) // 輸出:user_id
}
package mainimport (
"fmt"
"reflect" // 這裡引入reflect模組)
type user struct
func main()
s := reflect.typeof(user).elem() //通過反射獲取type定義
for i := 0; i < s.numfield(); i++
}
GO語言中的StructTag型別
structtag是什麼?在go語言裡,structtag是乙個標記字串,此字串可跟隨在struct中欄位定義的後面。structtag就是一系列的 key value 形式的組合,其中key是乙個不可為空的字串,key value組合可以有多個,空格分隔。structtag有什麼用?structt...
Go 結構體標籤(Struct Tag)
在處理json格式字串的時候,經常會看到宣告struct結構的時候,屬性的右側還有小公尺點括起來的內容。形如 1 type user struct 這個小公尺點裡的內容是用來幹什麼的呢?要比較詳細的了解這個,要先了解一下golang的基礎,在golang中,命名都是推薦都是用駝峰方式,並且在首字母大...
GO語言01 介紹 環境搭建
go 即golang,是google公司2009年11月正式對外公開的一門程式語言,go是靜態強型別語言,是區別於解析型語言的編譯型語言。1.跨平台的編譯型語言 2.語法接近c語言 3.管道 channel 切片 slice 併發 routine 4.有垃圾 的機制 5.支援物件導向和面向過程的程式...