最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

omitempty在go中的使用方式

 更新時(shí)間:2024年09月17日 09:31:11   作者:濤歌依舊  
在Go語(yǔ)言編程中,`omitempty`標(biāo)記用于JSON編解碼過(guò)程中控制字段是否被包含,當(dāng)結(jié)構(gòu)體字段標(biāo)記為`omitempty`且字段值為空時(shí),該字段不會(huì)出現(xiàn)在生成的JSON中,有助于優(yōu)化JSON結(jié)構(gòu)和減小數(shù)據(jù)體積,通過(guò)具體示例解釋了`omitempty`的工作機(jī)制和實(shí)際效果

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中沒(méi)有addr字段。

可以去掉omitempty, 再試試。

go標(biāo)記omitempty的含義

"omitempty"是Go語(yǔ)言中的一個(gè)標(biāo)記,用于在編碼和解碼JSON數(shù)據(jù)時(shí)控制字段的行為。它可以應(yīng)用于結(jié)構(gòu)體字段的標(biāo)簽中。

當(dāng)字段被標(biāo)記為"`omitempty`"時(shí),它表示在編碼JSON數(shù)據(jù)時(shí),如果該字段的值為空值,即零值或空引用,則忽略該字段,不將其包含在生成的JSON中。換句話說(shuō),如果字段的值為零值或空引用,則不會(huì)在JSON中創(chuàng)建對(duì)應(yīng)的鍵值對(duì)。

這個(gè)特性對(duì)于減少生成的JSON大小、提高網(wǎng)絡(luò)傳輸效率以及使JSON數(shù)據(jù)更加簡(jiǎn)潔和可讀是有用的。

以下是一個(gè)示例,展示了如何在Go語(yǔ)言的結(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中將不會(huì)包含這些字段。只有當(dāng)它們具有非空值時(shí),才會(huì)在JSON中創(chuàng)建對(duì)應(yīng)的鍵值對(duì)。

總之,`omitempty`是Go語(yǔ)言中用于在編碼和解碼JSON時(shí)控制字段行為的標(biāo)記,它指示在生成的JSON中忽略空值字段。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入理解Go語(yǔ)言中的結(jié)構(gòu)體

    深入理解Go語(yǔ)言中的結(jié)構(gòu)體

    本文主要介紹了深入理解Go語(yǔ)言中的結(jié)構(gòu)體,包括定義結(jié)構(gòu)體、聲明結(jié)構(gòu)體變量、使用結(jié)構(gòu)體、結(jié)構(gòu)體關(guān)聯(lián)函數(shù)、new、組合等,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • go中空接口的具體使用

    go中空接口的具體使用

    空接口是一種特殊的接口類型,它不包含任何方法,本文主要介紹了go中空接口的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • GO語(yǔ)言并發(fā)編程之互斥鎖、讀寫鎖詳解

    GO語(yǔ)言并發(fā)編程之互斥鎖、讀寫鎖詳解

    這篇文章主要介紹了GO語(yǔ)言并發(fā)編程之互斥鎖、讀寫鎖詳解,本文是GO并發(fā)編程實(shí)戰(zhàn)一書(shū)的樣章,詳細(xì)講解了互斥鎖、讀寫鎖,然后給出了一個(gè)完整示例,需要的朋友可以參考下
    2014-11-11
  • Go?模塊在下游服務(wù)抖動(dòng)恢復(fù)后CPU占用無(wú)法恢復(fù)原因

    Go?模塊在下游服務(wù)抖動(dòng)恢復(fù)后CPU占用無(wú)法恢復(fù)原因

    這篇文章主要為大家介紹了Go?模塊在下游服務(wù)抖動(dòng)恢復(fù)后CPU占用無(wú)法恢復(fù)原因詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Go語(yǔ)言內(nèi)存泄漏場(chǎng)景分析與最佳實(shí)踐

    Go語(yǔ)言內(nèi)存泄漏場(chǎng)景分析與最佳實(shí)踐

    本文總結(jié)了Go語(yǔ)言中常見(jiàn)的內(nèi)存泄漏場(chǎng)景,并提供了解決方案和排查方法,通過(guò)合理使用資源、控制goroutine生命周期、避免全局變量濫用等措施,可以有效減少內(nèi)存泄漏,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2025-04-04
  • Go語(yǔ)言中循環(huán)Loop的用法介紹

    Go語(yǔ)言中循環(huán)Loop的用法介紹

    這篇文章介紹了Go語(yǔ)言中循環(huán)Loop的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • GO 語(yǔ)言運(yùn)行環(huán)境的基礎(chǔ)知識(shí)

    GO 語(yǔ)言運(yùn)行環(huán)境的基礎(chǔ)知識(shí)

    這篇文章主要介紹了GO 語(yǔ)言運(yùn)行環(huán)境的基礎(chǔ)知識(shí)的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • 基于golang的輕量級(jí)工作流框架Fastflow

    基于golang的輕量級(jí)工作流框架Fastflow

    這篇文章主要介紹了基于golang的輕量級(jí)工作流框架Fastflow,fastflow 執(zhí)行任務(wù)的過(guò)程會(huì)涉及到幾個(gè)概念:Dag, Task, Action, DagInstance,本文給大家分享完整流程,需要的朋友可以參考下
    2022-05-05
  • 關(guān)于Golang中range指針數(shù)據(jù)的坑詳解

    關(guān)于Golang中range指針數(shù)據(jù)的坑詳解

    這篇文章主要給大家介紹了關(guān)于Golang中range指針數(shù)據(jù)的坑的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • 一文詳解Go語(yǔ)言中方法的指針接收者與值接收者

    一文詳解Go語(yǔ)言中方法的指針接收者與值接收者

    在 Go 語(yǔ)言里,方法是一種特殊的函數(shù),它與特定的類型關(guān)聯(lián),方法可以使用值接收者或者指針接收者,理解這兩種接收者的區(qū)別和使用場(chǎng)景,對(duì)于編寫高效、正確的 Go 代碼至關(guān)重要,本文將深入剖析指針接收者和值接收者的特點(diǎn),需要的朋友可以參考下
    2025-06-06

最新評(píng)論

深圳市| 宜昌市| 洪湖市| 肃北| 古丈县| 营山县| 镇安县| 滨海县| 柞水县| 阆中市| 梧州市| 木兰县| 江永县| 虎林市| 克拉玛依市| 甘洛县| 陆良县| 商都县| 海伦市| 志丹县| 北辰区| 永丰县| 漳浦县| 恩平市| 鹤岗市| 扎赉特旗| 博客| 旌德县| 云浮市| 吉木萨尔县| 永平县| 云阳县| 闽清县| 文登市| 肥乡县| 田阳县| 化德县| 翼城县| 姚安县| 齐齐哈尔市| 内江市|