import "encoding/json"
struct tag
可以选择的控制字段有几种:
* `-`:不要解析这个字段
* `omitempty`:当字段为空(默认值)时,不要解析这个字段。比如 false、0、nil、长度为 0 的 array,map,slice,string
* `FieldName`:当解析 json 的时候,使用这个名字
* type,有些时候,我们在序列化或者反序列化的时候,可能结构体类型和需要的类型不一致,这个时候可以指定,支持string,number和boolean,array,object
Encode
func Marshal(v interface{}) ([]byte, error)
- omitempty: struct字段若有次tag,序列化时若为零值则在结果中忽略次字段
Decode
func Unmarshal(data []byte, v interface{}) error
- 区分nil和zeroValue:对零值非nil字段可用在构造的struct中用指针方式检验对应字段是否存在和零值
反射获取tag内容
type User struct {
UserId int `json:"user_id" bson:"user_id" test:"test"`
UserName string `json:"user_name" bson:"user_name"`}
获取tag中test的值
复制代码
// 获取tag中的内容
typeof := reflect.TypeOf(u)
field := typeof.Elem().Field(0)
fmt.Println(field.Tag.Get("json"))
// 输出:user_id
fmt.Println(field.Tag.Get("bson"))
// 输出:user_id
fmt.Println(field.Tag.Get("test"))
// 输出:test
有疑问加站长微信联系(非本文作者)