在 Go 语言中,可以通过反射(reflection)来获取结构体标签中的元信息。reflect 包提供了访问结构体标签的工具。下面是一个简单的示例,演示如何获取结构体字段的标签:
示例代码
package main
import (
    "fmt"
    "reflect"
)
type User struct {
    Name string `json:"name" validate:"required"`
    Age  int    `json:"age" validate:"min=18"`
}
func main() {
    // 获取 User 类型的反射对象
    u := User{Name: "Alice", Age: 25}
    t := reflect.TypeOf(u)
    // 遍历结构体的字段
    for i := 0; i < t.NumField(); i++ {
        field := t.Field(i)
        // 获取字段的标签
        jsonTag := field.Tag.Get("json")
        validateTag := field.Tag.Get("validate")
        fmt.Printf("Field: %s, JSON Tag: %s, Validate Tag: %s\n", field.Name, jsonTag, validateTag)
    }
}
运行结果
Field: Name, JSON Tag: name, Validate Tag: required
Field: Age, JSON Tag: age, Validate Tag: min=18
解释
reflect.TypeOf(u):获取结构体User的类型信息。t.NumField():获取结构体中的字段数量。t.Field(i):获取字段的元信息,返回一个reflect.StructField对象。field.Tag.Get("json"):通过Get方法提取指定 key 的标签内容(如json、validate等)。
应用场景
- 验证库:通过读取标签中的验证规则(如 
validate:"required"),可以自动验证字段的合法性。 - 序列化工具:读取标签中的格式信息(如 
json:"name"),可以控制序列化输出的字段名。 
使用这种反射机制,可以轻松读取并使用结构体标签中的元信息来实现丰富的功能。