在go中使用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, 再试试。
不多说。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接
相关推荐
-
linux下搭建go环境的安装配置讲解
linux下搭建go环境很简单: 1.下载go1.2.1.linux-386.tar.gz,网上到处有类似包,并放到linux目录下. taogeqq@taogeqq-virtual-machine:~/myspace$ ls a.out go1.2.1.linux-386.tar.gz test.cpp test.go taogeqq@taogeqq-virtual-machine:~/myspace$ 2. 切换到root用户,在root下解压,解压即安装,多么绿色的软件啊: root@t
-
用go gin server来做文件上传服务
之前已经go get安装了gin, 现在来玩下用go gin server作图片上传服务, 代码目录如下: taoge:~/test_gin$ tree . |-- public |-- template | `-- select_file.html `-- test_gin_server.go 2 directories, 2 files taoge:~/test_gin$ test_gin_server.go内容: package main import ( "fmt" "
-
使用go gin来操作cookie的讲解
准确地说, 这个标题是有问题的, go gin只能给浏览器返回操作cookie的指令, 真正执行cookie操作的是浏览器. 但广泛地来讲, 说go gin操作cookie, 也是可以的(间接操作) 来看go gin代码: package main import ( "github.com/gin-gonic/gin" ) func main() { router := gin.Default(); router.GET("/read_cookie", func(c
-
golang的空标识符理解
空白符(blank identifier) 空白符的产生可能是因为go不允许变量声明了但不使用.既然不想使用,何必声明变量呢,那就将变量用空白符代替,反正空白符就是用来抛弃的. 我们有时候看到这样的golang代码: import _ "net/http/pprof" 或 for _, c := range "11234" { log.Println(c) } 或 var _ io.Reader = (* XXX)(nil) //全局变量 或 var _ = Sui
-
go for range坑和闭包坑的分析
看程序: package main import ( "fmt" "time" ) func main() { str := []string{"I","like","Golang"} for _, v := range str{ v += "good" } for k, v := range str{ fmt.Println(k, v) } time.Sleep(1e9) } 结果:
-
go panic时如何让函数返回数据?
现在有这样一个问题:某函数如果正常执行,返回0,如果panic,则返回1,怎么搞呢? package main import "fmt" func test() int { defer func() { if err := recover(); err != nil { return 1 } }() var p *int *p = 0 return 0 } func main() { fmt.Println("ret is", test()) for {} } 这样
-
为什么Go语言把类型声明放在后面?
关于类型,官网上有一段仔细地介绍了一下函数指针的部分,现在的设计比起 C 的语法,清晰很多. 也就是说,类型放在后面是为了更加清晰易懂.Rob Pike 曾经在 Go 官方博客解释过这个问题(查看原文:Go's Declaration Syntax),简略翻译如下(水平有限翻译的不对的地方见谅): 引言 Go语言新人常常会很疑惑为什么这门语言的声明语法(declaration syntax)会和传统的C家族语言不同.在这篇博文里,我们会进行一个比较,并做出解答. C 的语法 首先,先看看 C 的
-
go代码实现买房贷款月供计算的方法
贷款金额:100元(先以100元为例,来对比下公积金贷款和商业贷款) 公积金贷款年利率: 3.25% 商业贷款的年利率: 4.90% 贷款期限:360个月(30年) 还款方式:等额本息 计算公式:之前推导过, 用等比数列搞起即可 go代码如下: package main import ( "fmt" "math" ) func get_pmt(f_interest_rate float64, term_number int, principal int) float
-
strings命令分析浅谈Go和C++编译时的一点小区别
最近查一个bug, 用strings命令分析, 竟然出乎意料地没有结果, 非常纳闷. 最后根据这个线索查出了bug的根本原因. 1. 在C++中, 即使函数在代码层面没有被调用, 也会最终编译到二进制中, 用strings可以分析. #include <iostream> using namespace std; void fun() { printf("hello world\n"); // strings分析有结果 } int main() { return 0;
-
go for range遍历二维数组的示例
go for range 遍历二维数组 var arry [2][3] int for index,_ := range arry { fmt.Print(index) } 运行结果: 0 1 没有遍历所有的6个元素. 二维数组 arry 可以理解为:拥有两个 一维数组元素 的一维数组,所以以上只是遍历了其的两个元素,index分别是0 1,value是两个 拥有三个int类型元素 的一维数组. var arry [2][3] int for index,value := range arr
随机推荐
- ubb js
- 解决VUEX刷新的时候出现数据消失
- 使用Java进行FreeMarker的web模板开发的基础教程
- 全面解析Bootstrap图片轮播效果
- php socket客户端及服务器端应用实例
- Python中的jquery PyQuery库使用小结
- Python 闭包的使用方法
- JS实现仿google、百度搜索框输入信息智能提示的实现方法
- JavaScript读二进制文件并用ajax传输二进制流的方法
- 图文详解mybatis+postgresql平台搭建步骤
- expect实现单台、多台服务器批量scp传输文件
- python 遍历字符串(含汉字)实例详解
- 《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
- 轻松掌握Java策略模式
- java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion问题解决方法
- JavaScript限定图片显示大小的方法
- Kotlin新手基础学习之Elvis操作符
- 微信小程序出现wx.navigateTo页面不跳转问题的解决方法
- 浅析python协程相关概念
- Python反射的用法实例分析
