詳解Go 結構體格式化輸出
阿新 • • 發佈:2020-08-31
在軟體系統中定位問題時日誌不可或缺,但是當一個系統功能繁多,需要列印的日誌也多如牛毛,此時為了提高我們瀏覽日誌的效率,便於閱讀的輸出格式必不可少。
列印結構體是列印日誌時最長見的操作,但是當結構體內容較多都在一行時,不易於閱讀。在 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 結構體格式化輸出的資料請關注我們其它相關文章!