欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go-spew調(diào)試?yán)髟斀?/h1>
 更新時(shí)間:2022年06月27日 09:40:49   作者:阿馮Bazinga  
這篇文章主要介紹了調(diào)試?yán)?go-spew,go-spew?可以以一種非常友好的方式輸出完整的數(shù)據(jù)結(jié)構(gòu)信息,go-spew?支持一些自定義配置,可以通過?spew.Config?修改,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

對(duì)于應(yīng)用的調(diào)試,我們經(jīng)常會(huì)使用 fmt.Println來(lái)輸出關(guān)鍵變量的數(shù)據(jù)?;蛘呤褂?log 庫(kù),將數(shù)據(jù)以 log 的形式輸出。對(duì)于基礎(chǔ)數(shù)據(jù)類型,上面兩種方法都可以比較方便地滿足需求。對(duì)于一些結(jié)構(gòu)體類型數(shù)據(jù),通常我們可以先將其序列化后再輸出。

如果結(jié)構(gòu)體中包含不可序列化的字段,比如 func 類型,那么序列化就會(huì)拋出錯(cuò)誤,阻礙調(diào)試。

go-spew

上面的需求,go-spew 可以完美地幫我們實(shí)現(xiàn)。go-spew 可以以一種非常友好的方式輸出完整的數(shù)據(jù)結(jié)構(gòu)信息。如:

s := "GoCN"
i := 123
spew.Dump(s, i) 
//-----
(string) (len=4) "GoCN"
(int) 123

對(duì)于復(fù)雜的數(shù)據(jù)類型:

type S struct {
 S2 *S2
 I  *int
}

type S2 struct {
 Str string
}

func main() {
 s := "GoCN"
 i := 2
 f := []float64{1.1, 2.2}
 m := map[string]int{"a": 1, "b": 2}
 e := errors.New("new error")
 ss := S{S2: &S2{Str: "xxx"}, I: &i}
 spew.Dump(s, i, f, m, e, ss)
}
//-----

(string) (len=4) "GoCN"
(int) 2
([]float64) (len=2 cap=2) {
 (float64) 1.1,
 (float64) 2.2
}
(map[string]int) (len=2) {
 (string) (len=1) "a": (int) 1,
 (string) (len=1) "b": (int) 2
}
(*errors.errorString)(0xc000010320)(new error)
(main.S) {
 S2: (*main.S2)(0xc000010330)({
  Str: (string) (len=3) "xxx"
 }),
 I: (*int)(0xc00001e1f0)(2)
}

可以看到,對(duì)于 map、slice、嵌套 struct 等類型的數(shù)據(jù)都可以友好地展示出來(lái)。包括長(zhǎng)度、字段類型、字段值、指針值以及指針指向的數(shù)據(jù)等。

u := &url.URL{Scheme: "https", Host: "gocn.vip"}
 req, err := http.NewRequestWithContext(context.Background(), "GET", u.String(), nil)
 if err != nil {
  panic(err)
 }
spew.Dump(req)
//-----
(*http.Request)(0xc000162000)({
 Method: (string) (len=3) "GET",
 URL: (*url.URL)(0xc000136090)(https://gocn.vip),
 Proto: (string) (len=8) "HTTP/1.1",
 ProtoMajor: (int) 1,
 ProtoMinor: (int) 1,
 Header: (http.Header) {
 },
 Body: (io.ReadCloser) <nil>,
 GetBody: (func() (io.ReadCloser, error)) <nil>,
 ContentLength: (int64) 0,
 TransferEncoding: ([]string) <nil>,
 Close: (bool) false,
 Host: (string) (len=8) "gocn.vip",
 Form: (url.Values) <nil>,
 PostForm: (url.Values) <nil>,
 MultipartForm: (*multipart.Form)(<nil>),
 Trailer: (http.Header) <nil>,
 RemoteAddr: (string) "",
 RequestURI: (string) "",
 TLS: (*tls.ConnectionState)(<nil>),
 Cancel: (<-chan struct {}) <nil>,
 Response: (*http.Response)(<nil>),
 ctx: (*context.emptyCtx)(0xc000020090)(context.Background)
})

上面是一個(gè) http.Request 類型的變量,其中包含多種復(fù)雜的數(shù)據(jù)類型,但 go-spew 都可以友好地輸出出來(lái),非常方便我們調(diào)試。

Dump系列函數(shù)

go-spew有三個(gè) Dump 系列函數(shù):

  • Dump() 標(biāo)準(zhǔn)輸出到os.Stdout

  • Fdump() 允許輸出自定義io.Writer

  • Sdump() 輸出的結(jié)果作為字符串返回

此外,還有 Printf、 Fprintf、Sprintf 幾個(gè)函數(shù)來(lái)支持定制輸出風(fēng)格。用法與 fmt 的函數(shù)相似。

自定義配置

go-spew 支持一些自定義配置,可以通過 spew.Config 修改。

一些常用配置如下:

  • Indent 修改分隔符

  • MaxDepth 控制遍歷最大深度

  • DisablePointerAddresses 控制是否打印指針類型數(shù)據(jù)地址

此外還有其他很多配置,大家可以自己測(cè)試一下,這里不再舉例。

小結(jié)

go-spew 是一個(gè)非常完美的輸出 Go 數(shù)據(jù)結(jié)構(gòu)的調(diào)試工具,并且經(jīng)過了全面的測(cè)試,測(cè)試覆蓋率為100%。該工具支持各種自定義配置,非常方便,可以有效提升我們?nèi)粘i_發(fā)的效率。

References

  • davecgh/go-spew: Implements a deep pretty printer for Go data structures to aid in debugging (github.com)

到此這篇關(guān)于 go-spew調(diào)試?yán)鞯奈恼戮徒榻B到這了,更多相關(guān) go-spew調(diào)試?yán)鲀?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Golang并發(fā)操作中常見的死鎖情形

    詳解Golang并發(fā)操作中常見的死鎖情形

    在Go的協(xié)程里面死鎖通常就是永久阻塞了,本文主要介紹了Golang并發(fā)操作中常見的死鎖情形,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-09-09
  • 詳解golang中接口使用的最佳時(shí)機(jī)

    詳解golang中接口使用的最佳時(shí)機(jī)

    接口在系統(tǒng)設(shè)計(jì)中,以及代碼重構(gòu)優(yōu)化中,是一個(gè)不可或缺的工具,能夠幫助我們寫出可擴(kuò)展,可維護(hù)性更強(qiáng)的程序,本文主要為大家介紹一下golang中接口使用的最佳時(shí)機(jī),有興趣的可以了解下
    2023-09-09
  • golang copy函數(shù)使用的坑

    golang copy函數(shù)使用的坑

    本文主要介紹了golang copy函數(shù)使用的坑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • GoLang調(diào)用鏈可視化go-callvis使用介紹

    GoLang調(diào)用鏈可視化go-callvis使用介紹

    與鏈路追蹤(Tracing)不同,Tracing關(guān)注復(fù)雜的分布式環(huán)境中各個(gè)服務(wù)節(jié)點(diǎn)間的調(diào)用關(guān)系,主要用于服務(wù)治理。而我們本次探索的代碼調(diào)用鏈路則是代碼方法級(jí)別的調(diào)用關(guān)系,主要用于代碼設(shè)計(jì)
    2023-02-02
  • GO語(yǔ)言中的Map使用方法詳解

    GO語(yǔ)言中的Map使用方法詳解

    這篇文章主要給大家介紹了關(guān)于GO語(yǔ)言中Map使用方法的相關(guān)資料,在go語(yǔ)言中map是散列表的引用,map的類型是map[k]v,也就是常說的k-v鍵值對(duì),需要的朋友可以參考下
    2023-08-08
  • Go語(yǔ)言中序列化與反序列化示例詳解

    Go語(yǔ)言中序列化與反序列化示例詳解

    我們的數(shù)據(jù)對(duì)象要在網(wǎng)絡(luò)中傳輸或保存到文件,就需要對(duì)其編碼和解碼動(dòng)作,Go語(yǔ)言當(dāng)然也支持所有這些編碼格式,下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言中序列化與反序列化的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Golang官方限流器time/rate的使用與實(shí)現(xiàn)詳解

    Golang官方限流器time/rate的使用與實(shí)現(xiàn)詳解

    限流器是后臺(tái)服務(wù)中十分重要的組件,在實(shí)際的業(yè)務(wù)場(chǎng)景中使用居多。time/rate?包基于令牌桶算法實(shí)現(xiàn)限流,本文主要為大家介紹了time/rate的使用與實(shí)現(xiàn),需要的可以參考一下
    2023-04-04
  • golang 輸出重定向:fmt Log,子進(jìn)程Log,第三方庫(kù)logrus的詳解

    golang 輸出重定向:fmt Log,子進(jìn)程Log,第三方庫(kù)logrus的詳解

    這篇文章主要介紹了golang 輸出重定向:fmt Log,子進(jìn)程Log,第三方庫(kù)logrus的詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-12-12
  • Golang實(shí)現(xiàn)自己的Redis數(shù)據(jù)庫(kù)內(nèi)存實(shí)例探究

    Golang實(shí)現(xiàn)自己的Redis數(shù)據(jù)庫(kù)內(nèi)存實(shí)例探究

    這篇文章主要為大家介紹了Golang實(shí)現(xiàn)自己的Redis數(shù)據(jù)庫(kù)內(nèi)存實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Ubuntu下安裝Go語(yǔ)言開發(fā)環(huán)境及編輯器的相關(guān)配置

    Ubuntu下安裝Go語(yǔ)言開發(fā)環(huán)境及編輯器的相關(guān)配置

    這篇文章主要介紹了Ubuntu下安裝Go語(yǔ)言開發(fā)環(huán)境及編輯器的相關(guān)配置,編輯器方面介紹了包括Vim和Eclipse,需要的朋友可以參考下
    2016-02-02

最新評(píng)論