Golang中的結構體標簽Struct Tag詳解
Struct Tag
在Golang中,結構體標記(Struct Tag),也稱為結構體注釋(Struct Annotation),是一種對Go結構體中的字段進行元數據附加的機制。這些標記是用反引號(`)包裹起來的鍵值對,可以在運行時通過反射機制獲取并處理。
結構體標記使用key:"value"的格式來定義,其中key是標記的名稱,value是該標記的值。一個結構體字段可以有多個標記,每個標記之間使用空格分隔。
使用方法和代碼示例
看一個例子:
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
注意如上結構體中反引號引起來的內容就是Golang中的Struct Tag,接下來看一下它的作用,如果輸出json格式
u := &User{Name: "xiaohong", Age: "18"}
j, _ := json.Marshal(u)
fmt.Println(string(j))
輸出如下內容
{"name": "xiaohong","age": 18}
如果去掉StructTag會輸出什么呢,看如下例子:
type User struct {
Name string
Age int
}
u := &User{Name: "xiaohong", Age: "18"}
j, _ := json.Marshal(u)
fmt.Println(string(j))
輸出如下內容:
{"Name": "xiaohong","Age": 18}
可以看出加上Struct Tag后,輸出的內容跟著發生了變化。所以Struct Tag通常是用來在將struct編碼轉換的過程中提供一些轉換規則信息.
一般來講,Tag 都是以 key:"value" 鍵值對的形式,如果有多個鍵值對,用空格分隔:
type User struct {
Name string `json:"name" xml:"name"`
}
key 一般指的是要使用的包名,比如這里的json表示這個Name字段會被 ```encoding/json```包使用和處理。
Struct Tag可以使用reflect包中的方法來獲取, Struct Tag是string基本類型的別名:type StructTag string,約定俗成的規則是以 key:"value" 這樣的鍵值對。
// 獲取tag中的內容
u := &User{Name: "xiaohong", Age: "18"}
t := reflect.TypeOf(u)
field := t.Elem().Field(0)
fmt.Println(field.Tag.Get("json"))
輸出內容如下:
name