演示omitempty 代碼:
package main
import (
"encoding/json"
"fmt"
)
func main() {
type Hobby struct {
Movie string `json:"movie,omitempty" bson:"movie"`
BasketballTeam string `json:"basketball_team,omitempty" bson:"basketball_team"`
}
type Person struct {
Name string `json:"name,omitempty" bson:"name"`
Level int `json:"level,omitempty" bson:"level"`
Hobby Hobby `json:"hobby,omitempty" bson:"hobby"`
}
var coder Person
var level int = 0
coder.Level = level
coder.Name = "mike"
bytes, _ := json.Marshal(coder)
fmt.Printf("%s\n", string(bytes))
// 打印為:{"name":"mike","hobby":{}}
return
}
我們發現給Level 字段賦值了0,但是json字符串化后打印, level字段沒有了。反而是沒有賦值的Hobby字段出現了。當實際應用時level可以為0,而Hobby 如果沒有賦值時字符串中不需要出現。 如何解決情況?
示例代碼:
package main
import (
"encoding/json"
"fmt"
)
func main() {
type Hobby struct {
Movie string `json:"movie,omitempty" bson:"movie"`
BasketballTeam string `json:"basketball_team,omitempty" bson:"basketball_team"`
}
type Person struct {
Name string `json:"name,omitempty" bson:"name"`
Level *int `json:"level,omitempty" bson:"level"`
Hobby *Hobby `json:"hobby,omitempty" bson:"hobby"`
}
var coder Person
var level int = 0
coder.Level = &level
coder.Name = "mike"
bytes, _ := json.Marshal(coder)
fmt.Printf("%s\n", string(bytes))
// 打印 {"name":"mike","level":0}
return
}
指定 Level 、Hobby 引用類型后問題就可以了。