Go Struct Tag 是怎么玩的
利用 go 反射机制,通过 不同的 tag name 进行不同的处理
package main
import (
"fmt"
"reflect" // 这里引入reflect模块
)
// 自定义 tag
const tagName = "validate"
type employee struct {
ID int `json:"id"`
Name string `json:"名字" validate:"presence,min=2,max=40"`
Age int `json:"年龄"`
Desc string `json:"描述" back:"好看否"`
weight float64 `json:"weight" 单位:"kg"`
Salary float64 `json:"-"`
Email string `validate:"email,required"`
MateName string `json:"mate_name,omitempty"`
}
func test2() {
zhangsan := employee{
ID: 1,
Name: "张三",
Age: 18,
Desc: "秀色可餐",
weight: 48.0,
Salary: 12.0,
MateName: "Prince",
}
t := reflect.TypeOf(zhangsan)
fmt.Println("Type: ", t.Name())
fmt.Println("Kind: ", t.Kind())
fmt.Println(t.NumField())
for i := 0; i < t.NumField(); i++ {
field := t.Field(i)
// 仅获取 tagname 为我们定义的 tag值
tag := field.Tag.Get(tagName) // 核心 :tagName="json","xml","pb"
fmt.Printf("%d. %v(%v), tag:'%v'\n", i+1, field.Name, field.Type.Name(), tag)
}
}
func main() {
test2()
}
- 原文作者:战神西红柿
- 原文链接:https://tomatoares.github.io/posts/go/Go-Struct-Tag-%E6%98%AF%E6%80%8E%E4%B9%88%E7%8E%A9%E7%9A%84/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。