最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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來輸出關(guān)鍵變量的數(shù)據(jù)?;蛘呤褂?log 庫,將數(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ù)都可以友好地展示出來。包括長(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 都可以友好地輸出出來,非常方便我們調(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ù)來支持定制輸出風(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)文章

  • 深度解密 Go 語言中的 sync.map

    深度解密 Go 語言中的 sync.map

    這篇文章主要介紹了深度解密 Go 語言中的 sync.map,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Goland debug失效詳細(xì)解決步驟(合集)

    Goland debug失效詳細(xì)解決步驟(合集)

    今天用Goland開發(fā)時(shí),打斷點(diǎn),以debug方式運(yùn)行,發(fā)現(xiàn)程序并沒有斷住,程序跳過了斷點(diǎn),直接運(yùn)行結(jié)束,網(wǎng)上搜尋了大量文章,最后得以解決,特此在這里總結(jié)幾種Goland debug失效常見情況,需要的朋友可以參考下
    2025-02-02
  • 最新評(píng)論

    宜州市| 盐边县| 江油市| 河东区| 乾安县| 博罗县| 慈溪市| 青浦区| 松江区| 朝阳区| 镇康县| 梓潼县| 浮山县| 边坝县| 廉江市| 通辽市| 永寿县| 平阳县| 合阳县| 赞皇县| 都江堰市| 平利县| 清丰县| 盘锦市| 靖西县| 兴城市| 全南县| 乐业县| 手游| 延吉市| 永寿县| 塘沽区| 上栗县| 钦州市| 中卫市| 南开区| 秀山| 锡林郭勒盟| 道真| 保德县| 灵石县|