Go 結構體標籤(Struct Tag)

2022-04-03 01:46:57 字數 1441 閱讀 3786

在處理json格式字串的時候,經常會看到宣告struct結構的時候,屬性的右側還有小公尺點括起來的內容。形如:

1 type user struct

這個小公尺點裡的內容是用來幹什麼的呢?

要比較詳細的了解這個,要先了解一下golang的基礎,在golang中,命名都是推薦都是用駝峰方式,並且在首字母大小寫有特殊的語法含義:包外無法引用。但是由經常需要和其它的系統進行資料互動,例如轉成json格式,儲存到mongodb啊等等。這個時候如果用屬性名來作為鍵值可能不一定會符合專案要求。

所以呢就多了小公尺點的內容,在golang中叫標籤(tag),在轉換成其它資料格式的時候,會使用其中特定的字段作為鍵值。例如上例在轉成json格式

u := &user

j, _ := 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 main

2 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...