Golang Go语言中分享一个用于打印复杂数据结构的库 gop

项目地址 https://github.com/ysmood/got/tree/master/lib/gop

目的是把复杂的结构体打印成易于阅读的格式。输出的格式使用的 Go 原生语法,不需要学习任何额外的知识就可以阅读输出。不像其他库可能需要考猜测输出格式。

特性

  • 使用原生 Go 语法输出
  • 支持循环引用(比如 go-spew 的这个 bug, 而 gop 可以正常打印)
  • 更好的 rune, []byte, time 等数据的可读性
  • 字符串里的隐藏字符也会被打印
  • 可配置的高亮打印
  • 根据排序后的 key 输出一致的 map
  • 自动将多行大段文字打印成多行以便于阅读
  • 可扩展的 API

用法

通常你只需要用 gop.P 函数:

package main

import ( “time”

"github.com/ysmood/got/lib/gop"

)

func main() { val := map[string]interface{}{ “bool”: true, “number”: 1 + 1i, “bytes”: []byte{97, 98, 99}, “lines”: “multiline string\nline two”, “slice”: []interface{}{1, 2}, “time”: time.Now(), “struct”: struct{ test int32 }{ test: 13, }, } val[“slice”].([]interface{})[1] = val[“slice”]

gop.P(val)

}

输出:


Golang Go语言中分享一个用于打印复杂数据结构的库 gop

更多关于Golang Go语言中分享一个用于打印复杂数据结构的库 gop的实战教程也可以访问 https://www.itying.com/category-94-b0.html

12 回复

支持打印指针成员么?感觉平时%+v 最大的问题就是无法输出指针成员…要自己写 Stringer

更多关于Golang Go语言中分享一个用于打印复杂数据结构的库 gop的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


支持

造过一个差不多的轮子,支持:godoc 链接跳转 层次路径访问 json/text/html 三种数据格式 html 显示对象折叠 设置显示私有和最大层数

html 的问题主要是 CI 的 log 里 debug 比较麻烦。

已 star

已 star

goutil 的 dump 还是比较初级的,比如打印循环引用的数据它直接 crash , 而且打印的数据也过于冗杂,对于字符串里的回车等特殊字符也打印的有歧义,这不但不有助于 debug 反而容易隐藏 bug 。你可以试着用它来打印我示例里的数据就懂了。gop 打印的数据比 dump 少一个数量级。

哈哈这个我也想过,我有一个实用方案:

func PrintJson(in interface{}) {
res, err := json.MarshalIndent(in, “”, “\t”)
if err != nil {
fmt.Println(“json marshal error”, err)
return
}
fmt.Println(string(res))
}

直接借用 json 序列化打印就行~方便快捷

这样无法打印私有变量,而且你用你这个方法打印我示例里的数据直接会 crash ,试试你就懂了。

在Golang(Go语言)生态系统中,处理复杂数据结构的打印和调试是一个常见需求。gop库正是为解决这一问题而设计的,它是一个功能强大的工具,能够帮助开发者以更加直观和可读的方式输出Go语言中的复杂数据结构。

gop库的核心优势在于其提供的高度定制化的打印功能。它不仅能够递归地打印出嵌套的数据结构,还能够以彩色高亮的方式展示不同类型的数据,使得输出结果更加清晰易读。这对于调试大型项目中的复杂数据结构尤为有用。

此外,gop库还支持多种输出格式,包括但不限于JSON、YAML等,这进一步增强了其灵活性和实用性。开发者可以根据需要选择最适合自己项目的输出格式,以便更好地理解和分析数据。

在使用gop库时,你只需简单地引入该库,并调用其提供的打印函数即可。这些函数通常具有简洁明了的API设计,使得集成和使用变得非常容易。

总的来说,gop库是一个强大且易用的Go语言工具,它极大地简化了复杂数据结构的打印和调试工作。如果你正在寻找一个能够帮助你更好地理解和分析Go语言中复杂数据结构的库,那么gop无疑是一个值得尝试的选择。

请注意,虽然gop库功能强大,但在实际项目中仍需根据具体需求进行选择和集成。同时,建议查阅最新的官方文档或社区资源以获取更多关于gop库的详细信息和使用技巧。

回到顶部