溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

一文讀懂Go 結(jié)構(gòu)體格式化輸出

發(fā)布時(shí)間:2020-11-06 17:03:01 來源:億速云 閱讀:872 作者:Leah 欄目:開發(fā)技術(shù)

今天就跟大家聊聊有關(guān)一文讀懂Go 結(jié)構(gòu)體格式化輸出,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

在軟件系統(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"
}
}

看完上述內(nèi)容,你們對(duì)一文讀懂Go 結(jié)構(gòu)體格式化輸出有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI