版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wyy626562203/article/details/83626447
文章目录
go语言中StructTag读取
通过反射来读取StructTag
package main
import (
"encoding/json"
"fmt"
"reflect"
)
type Message struct {
Name string `json:"myname"` // 对应JSON的myname
Body string `json:"mybody,omitempty"` // 如果为空置则忽略字段
Time int64 `json:"-"` // 忽略该字段
Age int8 `json:",omitempty"` // 没有指定字段名,JSON中使用Age为字段名
}
type Tag1 struct {
Name string "user name" //这引号里面的就是tag
Passwd string "user passsword"
}
type Tag2 struct {
Name string `firstname:"wang" lastname:"xixi"`
}
func main() {
/****************1****************/
fmt.Println("****************1****************")
m := Message{Name: "Alice", Body: "", Time: 123,Age:18}
data, err := json.Marshal(m)
if err != nil {
fmt.Printf(err.Error())
return
}
fmt.Println(string(data))
/****************2****************/
fmt.Println("****************2****************")
tag1 := Tag1{}
t1 := reflect.TypeOf(tag1) //通过反射获取type定义
for i := 0; i < t1.NumField(); i++ {
fmt.Println(t1.Field(i).Tag) //将tag输出出来
}
/****************3****************/
fmt.Println("****************3****************")
tag2 := Tag2{}
t2 := reflect.TypeOf(tag2)
field := t2.Field(0)
fmt.Println(field.Tag.Get("firstname"), field.Tag.Get("lastname"))
}
输出
****************1****************
{"myname":"Alice","Age":18}
****************2****************
user name
user passsword
****************3****************
wang xixi