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ù)時(shí)控制字段的行為。它可以應(yīng)用于結(jié)構(gòu)體字段的標(biāo)簽中。
當(dāng)字段被標(biāo)記為"`omitempty`"時(shí),它表示在編碼JSON數(shù)據(jù)時(shí),如果該字段的值為空值,即零值或空引用,則忽略該字段,不將其包含在生成的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時(shí),如果`Age`和`Email`字段的值為空值(例如,`Age`為0,`Email`為空字符串),則在生成的JSON中將不會包含這些字段。只有當(dāng)它們具有非空值時(shí),才會在JSON中創(chuàng)建對應(yīng)的鍵值對。
總之,`omitempty`是Go語言中用于在編碼和解碼JSON時(shí)控制字段行為的標(biāo)記,它指示在生成的JSON中忽略空值字段。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Go?模塊在下游服務(wù)抖動恢復(fù)后CPU占用無法恢復(fù)原因
這篇文章主要為大家介紹了Go?模塊在下游服務(wù)抖動恢復(fù)后CPU占用無法恢復(fù)原因詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
GO 語言運(yùn)行環(huán)境的基礎(chǔ)知識
這篇文章主要介紹了GO 語言運(yùn)行環(huán)境的基礎(chǔ)知識的相關(guān)資料,需要的朋友可以參考下2022-09-09
關(guān)于Golang中range指針數(shù)據(jù)的坑詳解
這篇文章主要給大家介紹了關(guān)于Golang中range指針數(shù)據(jù)的坑的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02

