詳解Go 結(jié)構(gòu)體格式化輸出
在軟件系統(tǒng)中定位問題時日志不可或缺,但是當(dāng)一個系統(tǒng)功能繁多,需要打印的日志也多如牛毛,此時為了提高我們?yōu)g覽日志的效率,便于閱讀的輸出格式必不可少。
打印結(jié)構(gòu)體是打印日志時最長見的操作,但是當(dāng)結(jié)構(gòu)體內(nèi)容較多都在一行時,不易于閱讀。在 Go 中結(jié)構(gòu)體可以方便的轉(zhuǎn)為 JSON,因此我們可以借助 JSON 完成對 struct 的格式化輸出。
打印在一行,使用 %+v 顯示結(jié)構(gòu)體字段名:
package main import ( "fmt" ) // Student 學(xué)生信息 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) }
運(yùn)行輸出:
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()) }
運(yùn)行輸出結(jié)果:
student={
"Name": "cat",
"Addr": {
"Province": "Guangdong",
"City": "Shenzhen",
"County": "Baoan",
"Street": "Xixiang",
"DetailedAddr": "Shengtianqi"
},
"M": {
"hobby": "pingpopng"
}
}
將 strutc 轉(zhuǎn)為 json 串后再格式化輸出,大大增加了可閱讀性。
轉(zhuǎn)換函數(shù)已經(jīng)添加至個人的 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) }
運(yùn)行輸出:
student={
"Name": "cat",
"Addr": {
"Province": "Guangdong",
"City": "Shenzhen",
"County": "Baoan",
"Street": "Xixiang",
"DetailedAddr": "Shengtianqi"
},
"M": {
"hobby": "pingpopng"
}
}
以上就是詳解Go 結(jié)構(gòu)體格式化輸出的詳細(xì)內(nèi)容,更多關(guān)于Go 結(jié)構(gòu)體格式化輸出的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
golang 數(shù)組隨機(jī)排序的實(shí)現(xiàn)
本文主要介紹了golang 數(shù)組隨機(jī)排序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12golang jwt+token驗證的實(shí)現(xiàn)
這篇文章主要介紹了golang jwt+token驗證的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Golang連接池的幾種實(shí)現(xiàn)案例小結(jié)
這篇文章主要介紹了Golang連接池的幾種實(shí)現(xiàn)案例小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Go實(shí)現(xiàn)后臺任務(wù)調(diào)度系統(tǒng)的實(shí)例代碼
平常我們在開發(fā)API的時候,前端傳遞過來的大批數(shù)據(jù)需要經(jīng)過后端處理,如果后端處理的速度快,前端響應(yīng)就快,反之則很慢,影響用戶體驗,為了解決這一問題,需要我們自己實(shí)現(xiàn)后臺任務(wù)調(diào)度系統(tǒng),本文將介紹如何用Go語言實(shí)現(xiàn)后臺任務(wù)調(diào)度系統(tǒng),需要的朋友可以參考下2023-06-06golang?metrics各個指標(biāo)含義講解說明
這篇文章主要為大家介紹了golang?metrics各個指標(biāo)含義講解說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05為什么Go里值為nil可以調(diào)用函數(shù)原理分析
這篇文章主要為大家介紹了為什么Go里值為nil可以調(diào)用函數(shù)原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08