1. 程式人生 > 程式設計 >詳解Go 結構體格式化輸出

詳解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",
"M": {
"hobby": "pingpopng"
}
}

以上就是詳解Go 結構體格式化輸出的詳細內容,更多關於Go 結構體格式化輸出的資料請關注我們其它相關文章!