golang 的序列化和反序列化,注意 TeaRead 和 TeaReadAdv 的区别是Name 的类型是 string 还是 *string, 两者都可以
type Tea struct {
Name string `json:"name"`
Age int `json:"age"`
}
type TeaRead struct {
Name string `json:"name"`
Age int `json:"-"` // 在反序列化时,忽略该字段
}
type TeaReadAdv struct {
Name *string `json:"name"`
Age int `json:"-"`
}
func StructToStringAdv() {
fmt.Println("In the StructToStringAdv")
// 实例化一个数据结构,用于生成json字符串
tea := Tea{
Name: "张三",
Age: 18,
}
jsonTea, err := json.Marshal(tea)
if err != nil {
fmt.Println("生成json字符串错误")
}
// jsonStu是[]byte类型,转化成string类型便于查看
fmt.Println(string(jsonTea))
fmt.Println("string to struct")
data := "{\"name\":\"lisi\",\"Age\":20}"
str := []byte(data)
teaRead := TeaRead{}
err = json.Unmarshal(str,&teaRead)
if err != nil{
fmt.Println(err)
}
fmt.Printf("%+v\n", teaRead)
fmt.Println(teaRead.Name)
fmt.Println("string to struct, 注意结构体的成员变量 Name 的类型是 *string")
teaReadAdv := TeaReadAdv{}
err = json.Unmarshal(str,&teaReadAdv)
if err != nil{
fmt.Println(err)
}
fmt.Printf("%+v\n", teaReadAdv)
fmt.Println(*(teaReadAdv.Name))
}