我对Go中的json空值的处理感到困惑。 可以说我有以下示例:
package main
import (
"fmt"
"encoding/json"
"log"
)
type Fruit struct {
Name string
Price int
Owner string
}
func main() {
jsonData := []byte(`
{
"Name": "Standard",
"Price" : null,
"Owner": null
}`)
var f Fruit
err := json.Unmarshal(jsonData, &f)
if err != nil {
log.Println(err)
}
fmt.Printf("Name is : %s\nPrice is : %d\nOwner is : %s\n", f.Name, f.Price, f.Owner)
if f.Owner == "" {
fmt.Printf("Name should be nil?\n")
}
if f.Price == 0 {
fmt.Printf("Price should be nil?\n")
}
}
现在,我的主要问题是:
区分零值和默认值的正确方法是什么?
例如,在下面的示例中,我无法知道水果的价格是否尚未设置或实际价格为零。
你们如何处理?
在其他语言中,string和ints都可以为null,但在Go中并非如此。
答案 0 :(得分:1)
使用指针:
type Fruit struct {
Name *string `json:"Name,omitempty"`
Price *int `json:"Price,omitempty"`
Owner *string `json:"Owner,omitempty"`
}
然后,您可以检查字段是否为nil或是否具有值。
但是,如果您想区分文档中存在一个字段并将其设置为null而该字段根本不存在的情况,这将无济于事。