结构体的tag
tag是结构体的元信息,运行时通过反射机制读取。结构体的tag一般定义在相应字段的后面,格式为:
fieldName fieldType `key1:"value1" key2:"value2"
同一个结构体字段可以设置多个键值对tag,不同的键值对之间使用空格分隔。
json tag
默认情况下序列化与反序列化使用的都是结构体的原生字段名,可以通过给结构体字段添加json tag来指定序列化后的字段名。
例如代码:
package main
import (
"fmt"
"encoding/json"
)
type Student struct {
Name string `json:"name"`
Age int64
Weight float64
Height float64
}
func main() {
s1 := Student{
Name: "jack",
Age: 20,
Weight: 71.5,
Height: 172.5,
}
b, err := json.Marshal(s1)
if err != nil {
fmt.Printf("json.Marshal failed, err:%v\n", err)
return
}
fmt.Printf("s1: %s\n", b)
var s2 Student
err = json.Unmarshal(b, &s2)
if err != nil {
fmt.Printf("json.Unmarshal failed, err:%v\n", err)
return
}
fmt.Printf("s2: %#v\n", s2)
}