在軟件系統中定位問題時日志不可或缺,但是當一個系統功能繁多,需要打印的日志也多如牛毛,此時為了提高我們瀏覽日志的效率,便于閱讀的輸出格式必不可少。
打印結構體是打印日志時最長見的操作,但是當結構體內容較多都在一行時,不易于閱讀。在 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 結構體格式化輸出的資料請關注腳本之家其它相關文章!
您可能感興趣的文章:- Go 結構體、數組、字典和 json 字符串的相互轉換方法
- go語言使用第三方包 json化結構體操作示例
- golang結構體與json格式串實例代碼
- Go語言中結構體方法副本傳參與指針傳參的區別介紹
- 淺談Go語言中的結構體struct & 接口Interface & 反射
- go語言通過反射獲取和設置結構體字段值的方法
- Go語言里的結構體文法實例分析
- Go語言指針訪問結構體的方法
- Go語言結構體定義和使用方法
- Go語言中的匿名結構體用法實例