omitempty在go中的使用方式
omitempty在go中的使用
直接上代碼:
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Addr string `json:"addr,omitempty"`
}
func main() {
p1 := Person{
Name: "taoge",
Age: 30,
}
data, err := json.Marshal(p1)
if err != nil {
panic(err)
}
fmt.Printf("%s\n", data)
fmt.Println(p1.Name, p1.Age, p1.Addr)
p2 := Person{
Name: "Cang Laoshi",
Age: 18,
Addr: "Japan",
}
data2, err := json.Marshal(p2)
if err != nil {
panic(err)
}
fmt.Printf("%s\n", data2)
fmt.Println(p2.Name, p2.Age, p2.Addr)
}結(jié)果:
{"name":"taoge","age":30}
taoge 30
{"name":"Cang Laoshi","age":18,"addr":"Japan"}
Cang Laoshi 18 Japan
可以看到,有了omitempty后,如果addr為空, 則生成的json中沒有addr字段。
可以去掉omitempty, 再試試。
go標(biāo)記omitempty的含義
"omitempty"是Go語言中的一個標(biāo)記,用于在編碼和解碼JSON數(shù)據(jù)時控制字段的行為。它可以應(yīng)用于結(jié)構(gòu)體字段的標(biāo)簽中。
當(dāng)字段被標(biāo)記為"`omitempty`"時,它表示在編碼JSON數(shù)據(jù)時,如果該字段的值為空值,即零值或空引用,則忽略該字段,不將其包含在生成的JSON中。換句話說,如果字段的值為零值或空引用,則不會在JSON中創(chuàng)建對應(yīng)的鍵值對。
這個特性對于減少生成的JSON大小、提高網(wǎng)絡(luò)傳輸效率以及使JSON數(shù)據(jù)更加簡潔和可讀是有用的。
以下是一個示例,展示了如何在Go語言的結(jié)構(gòu)體字段中使用"`omitempty`"標(biāo)記:
type Person struct {
Name string `json:"name"`
Age int `json:"age,omitempty"`
Email string `json:"email,omitempty"`
}在上述示例中,`Age`和`Email`字段都被標(biāo)記為`omitempty`。當(dāng)將`Person`結(jié)構(gòu)體編碼為JSON時,如果`Age`和`Email`字段的值為空值(例如,`Age`為0,`Email`為空字符串),則在生成的JSON中將不會包含這些字段。只有當(dāng)它們具有非空值時,才會在JSON中創(chuàng)建對應(yīng)的鍵值對。
總之,`omitempty`是Go語言中用于在編碼和解碼JSON時控制字段行為的標(biāo)記,它指示在生成的JSON中忽略空值字段。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
go使用SQLX操作MySQL數(shù)據(jù)庫的教程詳解
sqlx 是 Go 語言中一個流行的操作數(shù)據(jù)庫的第三方包,它提供了對 Go 標(biāo)準(zhǔn)庫 database/sql 的擴展,簡化了操作數(shù)據(jù)庫的步驟,下面我們就來學(xué)習(xí)一下go如何使用SQLX實現(xiàn)MySQL數(shù)據(jù)庫的一些基本操作吧2023-11-11
GoFrame框架數(shù)據(jù)校驗之校驗結(jié)果Error接口對象
這篇文章主要為大家介紹了GoFrame框架數(shù)據(jù)校驗之校驗結(jié)果Error接口對象示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
詳解Go如何實現(xiàn)協(xié)程并發(fā)執(zhí)行
線程是通過本地隊列,全局隊列或者偷其它線程的方式來獲取協(xié)程的,目前看來,線程運行完一個協(xié)程后再從隊列中獲取下一個協(xié)程執(zhí)行,還只是順序執(zhí)行協(xié)程的,而多個線程一起這么運行也能達(dá)到并發(fā)的效果,接下來就給給大家詳細(xì)介紹一下Go如何實現(xiàn)協(xié)程并發(fā)執(zhí)行2023-08-08

