有时在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")) }