關(guān)于golang中json包中的default選項(xiàng),它是一個(gè)比較有用的選項(xiàng),可以在在JSON解碼時(shí)給未定義字段設(shè)置默認(rèn)值。
type Person struct { Name string `json:"name"` Age int `json:"age"` } func main() { jsonString := `{"name":"Tom"}` var p Person err := json.Unmarshal([]byte(jsonString), &p) if err != nil { fmt.Println(err) return } // 打印輸出p.Age的默認(rèn)值為0 fmt.Println(p.Age) }
在上面的示例中,我們定義了一個(gè)Person結(jié)構(gòu)體,它包含兩個(gè)字段-Name和Age。我們還定義了一個(gè)JSON字符串,僅包含Name字段。我們使用json.Unmarshal解碼JSON字符串并將其賦值給Person結(jié)構(gòu)體。但是,由于JSON字符串不包含Age字段,所以在解碼后,p.Age的默認(rèn)值為0。
為了設(shè)置默認(rèn)值,我們可以使用json包提供的DefaultKey選項(xiàng)。
type Person struct { Name string `json:"name"` Age int `json:"age" default:"30"` } func main() { jsonString := `{"name":"Tom"}` var p Person err := json.Unmarshal([]byte(jsonString), &p) if err != nil { fmt.Println(err) return } // 打印輸出p.Age的默認(rèn)值為30 fmt.Println(p.Age) }
在上面的示例中,我們?yōu)锳ge字段添加了一個(gè)default選項(xiàng),并將它設(shè)置為30。當(dāng)JSON字符串不包含特定字段的默認(rèn)值時(shí),Unmarshal會(huì)將default的值賦給字段。
Default選項(xiàng)在編寫(xiě)應(yīng)用程序時(shí)非常有用,可以避免因未定義字段而導(dǎo)致的應(yīng)用程序崩潰。
上一篇html引入頭部尾部代碼
下一篇go 解析json