当前位置: 移动技术网 > IT编程>开发语言>Java > 详解Go 结构体格式化输出

详解Go 结构体格式化输出

2020年08月28日  | 移动技术网IT编程  | 我要评论
在软件系统中定位问题时日志不可或缺,但是当一个系统功能繁多,需要打印的日志也多如牛毛,此时为了提高我们浏览日志的效率,便于阅读的输出格式必不可少。打印结构体是打印日志时最长见的操作,但是当结构体内容较

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

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网