结构体使用
json解析是如果不明确字段的类型可使用模糊匹配解析,(应用类型反射实现会有一定的性能浪费)
import github.com/json-iterator/gotype UserInfo string{ Name string `json:"name"` Age int `json:"age"` }content := []byte{}// 例如当不明确源数据age是string还是int的时候,可开启模糊匹配extra.RegisterFuzzyDecoders()var object UserInfoif err := jsoniter.Unmarshal(content, &object); err ==nil{ }使用匿名结构体属性实现继承能力
type Common struct { Body interface{} `json:"body"` Code int `json:"code"` Msg string `json:"msg"`}type UserInfo string{ Name string `json:"name"` Age int `json:"age"` }type content struct { Common Body []UserInfo `json:"body"`}结构体赋值可以使用索引方式(匿名字段赋值很友好),适用struct类型结构很少变动的情况
type UserInfo string{ Name string `json:"name"` Age int `json:"age"` }user := UserInfo{"ouyangjun",27}
Json转换到struct,遇到接口未赋值如何处理?
1、如果value不在默认值范围内,可以通过值进行判断; 例如data.bid !=02、如果是struct(可以进行比较的类型)直接与空接口提进行比较; 例如 value == user{}3、将结构体的属性定义为指针类型,然后判断是否为nil(有局限性);例如value ==nil错误处理
打印错误的堆栈信息,便于捕获一些不明确异常
func stack() string { var buf [2 << 10]byte return string(buf[:runtime.Stack(buf[:], true)])}