详解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 结构体格式化输出的资料请关注其它相关文章!