在處理json格式字串的時候,經常會看到宣告struct結構的時候,屬性的右側還有小公尺點括起來的內容。形如:
1 type user struct
這個小公尺點裡的內容是用來幹什麼的呢?
要比較詳細的了解這個,要先了解一下golang的基礎,在golang中,命名都是推薦都是用駝峰方式,並且在首字母大小寫有特殊的語法含義:包外無法引用。但是由經常需要和其它的系統進行資料互動,例如轉成json格式,儲存到mongodb啊等等。這個時候如果用屬性名來作為鍵值可能不一定會符合專案要求。
所以呢就多了小公尺點的內容,在golang中叫標籤(tag),在轉換成其它資料格式的時候,會使用其中特定的字段作為鍵值。例如上例在轉成json格式
u := &userj, _ := json.marshal(u)
fmt.println(string(j))
// 輸出內容:
如果在屬性中不增加標籤說明,則輸出:
可以看到直接用struct的屬性名做鍵值。
其中還有乙個bson的宣告,這個是用在將資料儲存到mongodb使用的。
那麼當我們需要自己封裝一些操作,需要用到tag中的內容時,咋樣去獲取呢?這邊可以使用反射包(reflect)中的方法來獲取
t := reflect.typeof(u)field := t.elem().field(0)
fmt.println(field.tag.get("json"))
fmt.println(field.tag.get("bson"))
完整**:
1 package main2 3 import (
4 "encoding/json"
5 "fmt"
6 "reflect"
7 )8
9 func main()
14 // 輸出json格式
15 u := &user
16 j, _ := json.marshal(u)
17 fmt.println(string(j))
18 // 輸出內容:
19
20 // 獲取tag中的內容
21 t := reflect.typeof(u)
22 field := t.elem().field(0)
23 fmt.println(field.tag.get("json"))
24 // 輸出:user_id
25 fmt.println(field.tag.get("bson"))
26 // 輸出:user_id
27 }
Go 結構體標籤詳解
結構體的字段除了名字和型別外,還可以有乙個可選的標籤 tag 它是乙個附屬於字段的字串,可以是文件或其他的重要標記。比如在我們解析json或生成json檔案時,常用到encoding json包,它提供一些預設標籤,例如 omitempty標籤可以在序列化的時候忽略0值或者空值。而 標籤的作用是不進...
go語言中結構體標籤的語法
原文 通過反射獲取結構體的成員型別 通過反射獲取值資訊 提示結構體標籤 struct tag 類似於 c 中的特性 attribute c 允許在類 字段 方法等前面新增 attribute,然後在反射系統中可以獲取到這個屬性系統。例如 conditional debug public static...
go 修改結構體方法 go結構體方法
golang中的方法是作用在特定型別的變數上,因此自定義型別,都可以有方法,而不僅僅是struct。定義格式 func var struct name funcname var0,var1.return type package main import fmt type test struct na...