有的时候上游传过来的字段是 string 类型的,但是我们却想用变成数字来使用。本来用一个 json:",string" 就可以支持了,如果不知道 golang 的这些小技巧,就要大费周章了。
参考文章:http://attilaolah.eu/2014/09/10/json-and-struct-composition-in-go/
1. 临时忽略 struct 空字段
type User struct {
Email string `json:"email"`
Password string `json:"password"`
}
如果想临时忽略掉空 Password 字段,可以用 omitempty:
json.Marshal(struct {
*User
Password bool `json:"password,omitempty"`
}{
User: user,
})
2. 解析成 string 类型
type User struct {
Id uint64 `json:"id,string"`
}
func main() {
user := User{Id: 123}
bs, _ := json.Marshal(user)
fmt.Println(string(bs))
}
输出
{"id":"123"}
3. 临时添加额外的字段
type User struct {
Email string `json:"email"`
Password string `json:"password"`
// many more fields…
}
临时忽略掉空 Password 字段,并且添加 token 字段
json.Marshal(struct {
*User
Token string `json:"token"`
Password bool `json:"password,omitempty"`
}{
User: user,
Token: token,
})