您的位置:首页 >如何在 Go 中通过反射获取结构体字段的标签值
发布于2026-04-08 阅读(0)
扫一扫,手机访问

本文介绍如何使用 Go 的 reflect 包读取结构体字段上的自定义标签(如 json:"name"),并通过 StructTag.Get() 方法提取指定键的值,适用于序列化、校验、ORM 映射等场景。
本文介绍如何使用 Go 的 reflect 包读取结构体字段上的自定义标签(如 `json:"name"`),并通过 `StructTag.Get()` 方法提取指定键的值,适用于序列化、校验、ORM 映射等场景。
在 Go 语言中,结构体字段标签(struct tags)是附加在字段声明后的反引号字符串,常用于控制 JSON、XML 序列化行为(如 json:"user_name,omitempty")。但这些标签并非仅限标准库使用——开发者也可定义自己的标签键(如 validate:"required" 或 db:"id"),并在运行时通过反射机制动态读取和解析。
核心步骤如下:
以下是一个完整示例:
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string `json:"name" validate:"required" db:"username"`
Email string `json:"email" validate:"email" db:"email_addr"`
}
func main() {
u := User{}
t := reflect.TypeOf(u)
// 遍历所有字段
for i := 0; i < t.NumField(); i++ {
field := t.Field(i)
fmt.Printf("字段: %s\n", field.Name)
fmt.Printf(" JSON 标签: %s\n", field.Tag.Get("json"))
fmt.Printf(" 校验规则: %s\n", field.Tag.Get("validate"))
fmt.Printf(" 数据库列名: %s\n", field.Tag.Get("db"))
fmt.Println()
}
}输出结果:
字段: Name JSON 标签: name 校验规则: required 数据库列名: username 字段: Email JSON 标签: email 校验规则: email 数据库列名: email_addr
⚠️ 注意事项:
掌握结构体标签的反射访问能力,是构建通用工具(如配置绑定、API 参数校验、轻量 ORM)的关键基础。合理封装标签读取逻辑,可显著提升代码复用性与扩展性。
上一篇:去上网怎么查网吧消费记录
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9