详解Go 结构体格式化输出
在软件系统中定位问题时日志不可或缺,但是当一个系统功能繁多,需要打印的日志也多如牛毛,此时为了提高我们浏览日志的效率,便于阅读的输出格式必不可少。
打印结构体是打印日志时最长见的操作,但是当结构体内容较多都在一行时,不易于阅读。在Go中结构体可以方便的转为JSON,因此我们可以借助JSON完成对struct的格式化输出。
打印在一行,使用%+v显示结构体字段名:
packagemain import( "fmt" ) //Student学生信息 typeStudentstruct{ Namestring AddrHomeInfo Mmap[string]string } //HomeInfo家庭住址 typeHomeInfostruct{ Provincestring Citystring Countystring Streetstring DetailedAddrstring } varstudent=Student{ Name:"dablelv", Addr:HomeInfo{ Province:"Guangdong", City:"Shenzhen", County:"Baoan", Street:"Xixiang", DetailedAddr:"Shengtianqi", }, M:map[string]string{ "hobby":"pingpopng", }, } funcmain(){ fmt.Printf("student=%+v\n",student) }
运行输出:
student={Name:catAddr:{Province:GuangdongCity:ShenzhenCounty:BaoanStreet:XixiangDetailedAddr:Shengtianqi}M:map[hobby:pingpopng]}
输出格式化JSON串:
funcmain(){ bs,_:=json.Marshal(student) varoutbytes.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,使用示例如下:
packagemain import( "fmt" huge"github.com/dablelv/go-huge-util" ) funcmain(){ 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结构体格式化输出的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。