📅  最后修改于: 2023-12-03 15:15:23.703000             🧑  作者: Mango
在 Golang 中,我们可以在结构体类型定义中使用字段标签来给字段添加元数据,例如 JSON 序列化时的字段名、ORM 映射时的表名和列名等。
下面是一个定义了字段标签的结构体类型:
package main
import "fmt"
type User struct {
ID int `json:"id" db:"user_id"`
Name string `json:"name" db:"user_name"`
Age int `json:"age" db:"user_age"`
Birthday string `json:"birthday" db:"user_birthday"`
}
func main() {
user := User{
ID: 100,
Name: "张三",
Age: 18,
Birthday: "2001-01-01",
}
fmt.Printf("%#v\n", user)
}
在上面的代码中,我们定义了一个结构体类型 User
,它有 4 个字段,分别是 ID
、Name
、Age
和 Birthday
。我们给这些字段添加了不同的字段标签,其中 json
标签表示在 JSON 序列化时的字段名,db
标签表示在 ORM 映射时的表名和列名。
我们可以使用反射来获取结构体类型中字段的标签,例如:
...
import "reflect"
func main() {
...
v := reflect.ValueOf(user)
t := v.Type()
for i := 0; i < t.NumField(); i++ {
field := t.Field(i)
jsonTag := field.Tag.Get("json")
dbTag := field.Tag.Get("db")
fmt.Printf("%s: %s, %s\n", field.Name, jsonTag, dbTag)
}
}
在上面的代码中,我们使用了 reflect
包来获取 User
结构体类型中的字段信息。在循环中,我们使用 Field
方法获取第 i
个字段信息,然后使用 Tag.Get
方法获取其 json
和 db
标签的值,并打印出来。
输出结果为:
ID: id, user_id
Name: name, user_name
Age: age, user_age
Birthday: birthday, user_birthday