我对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 : %snPrice is : %dnOwner is : %sn", 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")
}
}
现在,我的主要问题是:
区分零值和默认值的正确方法是什么
例如,在下面的例子中,我无法知道水果的价格是没有设定的,还是实际价格为零。
你们是怎么处理的?
在其他语言中,字符串和int都可以为null,但Go中的情况并非如此。
使用指针:
type Fruit struct {
Name *string `json:"Name,omitempty"`
Price *int `json:"Price,omitempty"`
Owner *string `json:"Owner,omitempty"`
}
然后,您可以检查字段是否为零,或者它是否有值。
但是,如果您想区分文档中存在字段并设置为null和该字段根本不存在的情况,这对您没有帮助。