项目地址 https://github.com/ysmood/got/tree/master/lib/gop
目的是把复杂的结构体打印成易于阅读的格式。输出的格式使用的 Go 原生语法,不需要学习任何额外的知识就可以阅读输出。不像其他库可能需要考猜测输出格式。
通常你只需要用 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)
}
输出:
1
tairan2006 2022-03-22 21:36:51 +08:00
支持打印指针成员么?感觉平时%+v 最大的问题就是无法输出指针成员…要自己写 Stringer
|
2
ysmood OP @tairan2006 支持
|
3
eudore 2022-03-23 10:01:23 +08:00
造过一个差不多的轮子,支持:godoc 链接跳转 层次路径访问 json/text/html 三种数据格式 html 显示对象折叠 设置显示私有和最大层数
|
5
FlyingDough 2022-03-23 11:29:41 +08:00
已 star
|
6
rekulas 2022-03-23 12:26:17 +08:00
cool
|
7
Redamancy 2022-03-28 17:25:31 +08:00
已 star
|
8
guanhui07 2022-03-28 18:08:30 +08:00
|
9
ysmood OP @guanhui07 goutil 的 dump 还是比较初级的,比如打印循环引用的数据它直接 crash , 而且打印的数据也过于冗杂,对于字符串里的回车等特殊字符也打印的有歧义,这不但不有助于 debug 反而容易隐藏 bug 。你可以试着用它来打印我示例里的数据就懂了。gop 打印的数据比 dump 少一个数量级。
|
10
knowckx 2022-03-30 10:29:19 +08:00
哈哈这个我也想过,我有一个实用方案:
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 序列化打印就行~方便快捷 |