「Go工具箱」推荐一个变量调试神器:go-spew
大家好,我是渔夫子。本号新推出「Go工具箱」系列,意在给大家分享使用go语言编写的、实用的、好玩的工具。同时了解其底层的实现原理,以便更深入地了解Go语言。
今天给大家推荐的是一个可以将变量以一种非常友好的方式输出其完整的数据结构信息的工具:go-spew。
该包经过了全面的测试,测试覆盖率为100%。支持各种自定义配置,非常方便,可以有效提升我们日常开发的效率。下面是该包的基础档案:
go-spew小档案 | |||
---|---|---|---|
star | 5.3k | used by | 311k+ |
contributors | 20 | 工具分类 | 效率 |
功能简介 | 以一种更友好的方式输出输出变量的完整的数据结构信息 |
先来看下基础使用及其效果,以下有一个指针类型的切片,分别通过go-spew和fmt.Printf格式化输出:
type Project struct {
Name string
}
func main() {
f := []*Project{
&Project{Name: "张三"},
&Project{Name: "李四"},
}
spew.Config.Indent = "\t"
spew.Dump(f)
fmt.Printf("f:%+v\n", f)
}
spew包会输出格式化、详细的数据结构信息:
([]*igospew.Project) (len=2 cap=2) {
(*igospew.Project)(0xc00009ae10)({
Name: (string) (len=6) "张三",
CreateTime: (time.Time) 0001-01-01 00:00:00 +0000 UTC,
Addr: (*igospew.Address)(<nil>)
}),
(*igospew.Project)(0xc00009ae40)({
Name: (string) (len=6) "李四",
CreateTime: (time.Time) 0001-01-01 00:00:00 +0000 UTC,
Addr: (*igospew.Address)(<nil>)
})
}
fmt.Printf的输出只有变量的地址,而没有详细的内容:
f:[0xc00009ae10 0xc00009ae40]
该包对于 map、slice、嵌套 struct 等类型的数据都可以友好地展示出来。包括长度、字段类型、字段值、指针值以及指针指向的数据等。
实现原理:该包本质上还是利用了reflect反射功能。通过reflect.ValueOf函数获取变量的值,然后再根据该值的Kind函数来判断其具体的数据类型,然后根据数据类型对值进行转换输出。同时再配合换行和缩进来实现格式化的输出。
更多功能
go-spew有三个 Dump 系列函数:
- Dump() 标准输出到os.Stdout
- Fdump() 允许输出到自定义io.Writer
- Sdump() 输出的结果作为字符串返回
此外,还有 Printf、 Fprintf、Sprintf 几个函数来支持定制输出风格。用法与 fmt 的函数相似。
自定义配置
go-spew 支持一些自定义配置,可以通过 spew.Config 修改。
一些常用配置如下:
- Indent 修改分隔符
- MaxDepth 控制遍历最大深度
- DisablePointerAddresses 控制是否打印指针类型数据地址
更多项目详情请查看如下链接。
开源项目地址:https://github.com/davecgh/go-spew
开源项目作者:Dave Collins
---特别推荐---
特别推荐:一个专注go项目实战、项目中踩坑经验及避坑指南、各种好玩的go工具的公众号,「Go学堂」,专注实用性,非常值得大家关注。点击下方公众号卡片,直接关注。关注送《100个go常见的错误》pdf文档。
相关文章
- Jgit的使用笔记
- 利用Github Action实现Tornadofx/JavaFx打包
- 叹息!GitHub Trending 即将成为历史!
- 微软软了?开源社区讨论炸锅,GitHub CEO 亲自来答
- GitHub Trending 列表频现重复项,前后端都没去重?
- Photoshop Elements 2021版本软件安装教程(mac+windows全版本都有)
- (ps全版本)Photoshop 2020的安装与破解教程(mac+windows全版本都有)
- (ps全版本)Photoshop cc2018的安装与破解教程(mac+windows全版本,包括2023
- 环境搭建:Oracle GoldenGate 大数据迁移到 Redshift/Flat file/Flume/Kafka测试流程
- 每个开发人员都要掌握的:最小 Linux 基础课
- 来撸羊毛了!Windows 环境下 Hexo 博客搭建,并部署到 GitHub Pages
- 超实用!手把手入门 MongoDB:这些坑点请一定远离
- 【GitHub日报】22-10-09 zustand、neovim、webtorrent、express 等4款App今日上新
- 【GitHub日报】22-10-10 brew、minio、vite、seaweedfs、dbeaver 等8款App今日上新
- 【GitHub日报】22-10-11 cobra、grafana、vue、ToolJet、redwood 等13款App今日上新
- Photoshop 2018 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2017 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2020 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2023 资源免费下载(mac+windows全版本都有,包括最新的2023)
- 最新版本Photoshop CC2018软件安装教程(mac+windows全版本都有,包括2023