详解Go 结构体格式化输出

 更新时间:2020年08月27日 15:45:13   作者:Dabelv  
这篇文章主要介绍了Go 结构体格式化输出的相关资料,帮助大家更好的理解和学习go语言,感兴趣的朋友可以了解下

在软件系统中定位问题时日志不可或缺,但是当一个系统功能繁多,需要打印的日志也多如牛毛,此时为了提高我们浏览日志的效率,便于阅读的输出格式必不可少。

打印结构体是打印日志时最长见的操作,但是当结构体内容较多都在一行时,不易于阅读。在 Go 中结构体可以方便的转为 JSON,因此我们可以借助 JSON 完成对 struct 的格式化输出。

打印在一行,使用 %+v 显示结构体字段名:

package main

import (
	"fmt"
)

// Student 学生信息
type Student struct {
	Name  string
	Addr  HomeInfo
	M   map[string]string
}

// HomeInfo 家庭住址
type HomeInfo struct {
	Province   string
	City     string
	County    string
	Street    string
	DetailedAddr string
}

var student = Student{
	Name: "dablelv",
	Addr: HomeInfo{
		Province:   "Guangdong",
		City:     "Shenzhen",
		County:    "Baoan",
		Street:    "Xixiang",
		DetailedAddr: "Shengtianqi",
	},
	M: map[string]string{
		"hobby": "pingpopng",
	},
}

func main() {
	fmt.Printf("student=%+v\n", student)
}

运行输出:

student={Name:cat Addr:{Province:Guangdong City:Shenzhen County:Baoan Street:Xixiang DetailedAddr:Shengtianqi} M:map[hobby:pingpopng]}

输出格式化 JSON 串:

func main() {
	bs, _ := json.Marshal(student)
	var out bytes.Buffer
	json.Indent(&out, bs, "", "\t")
	fmt.Printf("student=%v\n", out.String())
}

运行输出结果:

student={
"Name": "cat",
"Addr": {
"Province": "Guangdong",
"City": "Shenzhen",
"County": "Baoan",
"Street": "Xixiang",
"DetailedAddr": "Shengtianqi"
},
"M": {
"hobby": "pingpopng"
}
}

将 strutc 转为 json 串后再格式化输出,大大增加了可阅读性。

转换函数已经添加至个人的 Go 工具库 go-huge-util,使用示例如下:

package main

import (
	"fmt"
  huge "github.com/dablelv/go-huge-util"
)

func main() {
	s, _ := huge.ToFormattedJSON(&student)
	fmt.Printf("student=%v\n", s)
}

运行输出:

student={
"Name": "cat",
"Addr": {
"Province": "Guangdong",
"City": "Shenzhen",
"County": "Baoan",
"Street": "Xixiang",
"DetailedAddr": "Shengtianqi"
},
"M": {
"hobby": "pingpopng"
}
}

以上就是详解Go 结构体格式化输出的详细内容,更多关于Go 结构体格式化输出的资料请关注脚本之家其它相关文章!

相关文章

  • golang 数组随机排序的实现

    golang 数组随机排序的实现

    本文主要介绍了golang 数组随机排序的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 详解Go语言各种常见类型的默认值和判空方法

    详解Go语言各种常见类型的默认值和判空方法

    本文主要介绍了详解Go语言各种常见类型的默认值和判空方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • golang jwt+token验证的实现

    golang jwt+token验证的实现

    这篇文章主要介绍了golang jwt+token验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 解决golang.org不能访问的问题(推荐)

    解决golang.org不能访问的问题(推荐)

    这篇文章主要介绍了解决golang.org不能访问的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • Golang连接池的几种实现案例小结

    Golang连接池的几种实现案例小结

    这篇文章主要介绍了Golang连接池的几种实现案例小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Go语言实现ssh&scp的方法详解

    Go语言实现ssh&scp的方法详解

    这篇文章主要为大家详细介绍了如何利用Go语言实现ssh&scp,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以了解一下
    2022-10-10
  • Go实现双向链表的示例代码

    Go实现双向链表的示例代码

    这篇文章主要介绍了Go实现双向链表的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Go实现后台任务调度系统的实例代码

    Go实现后台任务调度系统的实例代码

    平常我们在开发API的时候,前端传递过来的大批数据需要经过后端处理,如果后端处理的速度快,前端响应就快,反之则很慢,影响用户体验,为了解决这一问题,需要我们自己实现后台任务调度系统,本文将介绍如何用Go语言实现后台任务调度系统,需要的朋友可以参考下
    2023-06-06
  • golang metrics各个指标含义讲解说明

    golang metrics各个指标含义讲解说明

    这篇文章主要为大家介绍了golang metrics各个指标含义讲解说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 为什么Go里值为nil可以调用函数原理分析

    为什么Go里值为nil可以调用函数原理分析

    这篇文章主要为大家介绍了为什么Go里值为nil可以调用函数原理分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08

最新评论