有時在Go的結構體定義時會看到這樣的形式:
type User struct {
UserId int `json:"user_id" bson:"b_user_id"`
UserName string `json:"user_name" bson:"b_user_name"`
}
注意上述紅色部分,這就稱之為struct tag 。個人理解struct tag的作用類似於Java的注解的作用,在Go語言中可以通過反射機制在運行時動態獲取到struct的tag來實現一些特定功能。
下面列出相關參考代碼:
package main import ( "encoding/json" "fmt" "reflect" ) type User struct { UserId int `json:"user_id" bson:"b_user_id"` UserName string `json:"user_name" bson:"b_user_name"` } func main() { u := &User{UserId: 1, UserName: "tony"} 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")) }