omitempty在go中的使用方式

 更新时间:2024年09月17日 09:31:11   作者:涛歌依旧  
在Go语言编程中,`omitempty`标记用于JSON编解码过程中控制字段是否被包含,当结构体字段标记为`omitempty`且字段值为空时,该字段不会出现在生成的JSON中,有助于优化JSON结构和减小数据体积,通过具体示例解释了`omitempty`的工作机制和实际效果

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)
}

结果:

{"name":"taoge","age":30}
taoge 30 
{"name":"Cang Laoshi","age":18,"addr":"Japan"}
Cang Laoshi 18 Japan

可以看到,有了omitempty后,如果addr为空, 则生成的json中没有addr字段。

可以去掉omitempty, 再试试。

go标记omitempty的含义

"omitempty"是Go语言中的一个标记,用于在编码和解码JSON数据时控制字段的行为。它可以应用于结构体字段的标签中。

当字段被标记为"`omitempty`"时,它表示在编码JSON数据时,如果该字段的值为空值,即零值或空引用,则忽略该字段,不将其包含在生成的JSON中。换句话说,如果字段的值为零值或空引用,则不会在JSON中创建对应的键值对。

这个特性对于减少生成的JSON大小、提高网络传输效率以及使JSON数据更加简洁和可读是有用的。

以下是一个示例,展示了如何在Go语言的结构体字段中使用"`omitempty`"标记:

type Person struct {
    Name  string `json:"name"`
    Age   int    `json:"age,omitempty"`
    Email string `json:"email,omitempty"`
}

在上述示例中,`Age`和`Email`字段都被标记为`omitempty`。当将`Person`结构体编码为JSON时,如果`Age`和`Email`字段的值为空值(例如,`Age`为0,`Email`为空字符串),则在生成的JSON中将不会包含这些字段。只有当它们具有非空值时,才会在JSON中创建对应的键值对。

总之,`omitempty`是Go语言中用于在编码和解码JSON时控制字段行为的标记,它指示在生成的JSON中忽略空值字段。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 深入理解Go语言中的结构体

    深入理解Go语言中的结构体

    本文主要介绍了深入理解Go语言中的结构体,包括定义结构体、声明结构体变量、使用结构体、结构体关联函数、new、组合等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • go中空接口的具体使用

    go中空接口的具体使用

    空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • GO语言并发编程之互斥锁、读写锁详解

    GO语言并发编程之互斥锁、读写锁详解

    这篇文章主要介绍了GO语言并发编程之互斥锁、读写锁详解,本文是GO并发编程实战一书的样章,详细讲解了互斥锁、读写锁,然后给出了一个完整示例,需要的朋友可以参考下
    2014-11-11
  • Go 模块在下游服务抖动恢复后CPU占用无法恢复原因

    Go 模块在下游服务抖动恢复后CPU占用无法恢复原因

    这篇文章主要为大家介绍了Go 模块在下游服务抖动恢复后CPU占用无法恢复原因详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Go语言内存泄漏场景分析与最佳实践

    Go语言内存泄漏场景分析与最佳实践

    本文总结了Go语言中常见的内存泄漏场景,并提供了解决方案和排查方法,通过合理使用资源、控制goroutine生命周期、避免全局变量滥用等措施,可以有效减少内存泄漏,感兴趣的小伙伴跟着小编一起来看看吧
    2025-04-04
  • Go语言中循环Loop的用法介绍

    Go语言中循环Loop的用法介绍

    这篇文章介绍了Go语言中循环Loop的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • GO 语言运行环境的基础知识

    GO 语言运行环境的基础知识

    这篇文章主要介绍了GO 语言运行环境的基础知识的相关资料,需要的朋友可以参考下
    2022-09-09
  • 基于golang的轻量级工作流框架Fastflow

    基于golang的轻量级工作流框架Fastflow

    这篇文章主要介绍了基于golang的轻量级工作流框架Fastflow,fastflow 执行任务的过程会涉及到几个概念:Dag, Task, Action, DagInstance,本文给大家分享完整流程,需要的朋友可以参考下
    2022-05-05
  • 关于Golang中range指针数据的坑详解

    关于Golang中range指针数据的坑详解

    这篇文章主要给大家介绍了关于Golang中range指针数据的坑的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • 一文详解Go语言中方法的指针接收者与值接收者

    一文详解Go语言中方法的指针接收者与值接收者

    在 Go 语言里,方法是一种特殊的函数,它与特定的类型关联,方法可以使用值接收者或者指针接收者,理解这两种接收者的区别和使用场景,对于编写高效、正确的 Go 代码至关重要,本文将深入剖析指针接收者和值接收者的特点,需要的朋友可以参考下
    2025-06-06

最新评论