詳解Go 結(jié)構(gòu)體格式化輸出
在軟件系統(tǒng)中定位問題時(shí)日志不可或缺,但是當(dāng)一個(gè)系統(tǒng)功能繁多,需要打印的日志也多如牛毛,此時(shí)為了提高我們?yōu)g覽日志的效率,便于閱讀的輸出格式必不可少。
打印結(jié)構(gòu)體是打印日志時(shí)最長見的操作,但是當(dāng)結(jié)構(gòu)體內(nèi)容較多都在一行時(shí),不易于閱讀。在 Go 中結(jié)構(gòu)體可以方便的轉(zhuǎn)為 JSON,因此我們可以借助 JSON 完成對(duì) 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)添加至個(gè)人的 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)體格式化輸出的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
用go語言實(shí)現(xiàn)WebAssembly數(shù)據(jù)加密的示例講解
在Web開發(fā)中,有時(shí)候?yàn)榱颂嵘踩孕枰獙?duì)數(shù)據(jù)進(jìn)行加密,由于js代碼相對(duì)比較易讀,直接在js中做加密安全性較低,而WebAssembly代碼不如js易讀,本文提供一個(gè)用go語言實(shí)現(xiàn)的WebAssembly數(shù)據(jù)加密示例,需要的朋友可以參考下2024-03-03
Go?實(shí)現(xiàn)?Nginx?加權(quán)輪詢算法的方法步驟
本文主要介紹了Go?實(shí)現(xiàn)?Nginx?加權(quán)輪詢算法的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
詳解如何在Golang中實(shí)現(xiàn)CORS(跨域)
很多時(shí)候,需要允許Web應(yīng)用程序在不同域之間(跨域)實(shí)現(xiàn)共享資源,本文將簡(jiǎn)介跨域、CORS的概念,以及如何在Golang中如何實(shí)現(xiàn)CORS,文中有詳細(xì)的示例代碼,需要的朋友可以參考下2023-10-10
Golang 語言map底層實(shí)現(xiàn)原理解析
這篇文章主要介紹了Golang 語言map底層實(shí)現(xiàn)原理解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
Golang實(shí)現(xiàn)自定義recovery中間件
在?Golang?的?Web?項(xiàng)目中,自定義?recovery?中間件是一種常見的做法,用于捕獲并處理應(yīng)用程序的運(yùn)行時(shí)錯(cuò)誤,下面我們就來看看具體如何實(shí)現(xiàn)吧2023-09-09
Go語言:打造優(yōu)雅數(shù)據(jù)庫單元測(cè)試的實(shí)戰(zhàn)指南
Go語言數(shù)據(jù)庫單元測(cè)試入門:聚焦高效、可靠的數(shù)據(jù)庫代碼驗(yàn)證!想要確保您的Go應(yīng)用數(shù)據(jù)層堅(jiān)如磐石嗎?本指南將手把手教您如何利用Go進(jìn)行數(shù)據(jù)庫單元測(cè)試,輕松揪出隱藏的bug,打造無懈可擊的數(shù)據(jù)處理邏輯,一起來探索吧!2024-01-01

