欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解Go 结构体格式化输出

程序员文章站 2022-11-22 15:04:13
在软件系统中定位问题时日志不可或缺,但是当一个系统功能繁多,需要打印的日志也多如牛毛,此时为了提高我们浏览日志的效率,便于阅读的输出格式必不可少。打印结构体是打印日志时最长见的操作,但是当结构体内容较...

在软件系统中定位问题时日志不可或缺,但是当一个系统功能繁多,需要打印的日志也多如牛毛,此时为了提高我们浏览日志的效率,便于阅读的输出格式必不可少。

打印结构体是打印日志时最长见的操作,但是当结构体内容较多都在一行时,不易于阅读。在 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 结构体格式化输出的资料请关注其它相关文章!