簡體   English   中英

打印golang結構時,如何忽略String()方法?

[英]How do you ignore the String() method when printing a golang struct?

我有一個golang結構,並創建了一個String()方法,用於程序的正常操作。 我現在想要查看結構的全部內容。 我嘗試了通常的%+v格式,但似乎使用String()方法而不是向我顯示所有字段。 如何輸出原始結構數據?

示例: https//play.golang.org/p/SxTVOtwVV-9

package main

import (
    "fmt"
)

type Foo struct {
    Jekyl string
    Hyde  string
}

func (foo Foo) String() string {
    return foo.Jekyl // how I want it to show in the rest of the program
}

func main() {
    bar := Foo{Jekyl: "good", Hyde: "evil"}
    fmt.Printf("%+v", bar) // debugging to see what's going on, can't see the evil side
}

輸出

good

但我希望看到你沒有實現String()方法

{Jekyl:good Hyde:evil}

使用%#v格式

fmt.Printf("%#v", bar)

輸出:

main.Foo{Jekyl:"good", Hyde:"evil"}

參考https://stackoverflow.com/a/26116578/10245

https://play.golang.org/p/YWIf6zGU-En

雖然你的答案是正確的,但通常的做法是使用另一種類型去除結構的所有方法並使用其他方法(這通常用於編組/解組)。

如果將類型定義為type stripped Foo則將不再使用方法Foo.String()

代碼: https//play.golang.org/p/Ba2VvLAm92a

輸出: {Jekyl:good Hyde:evil}

為任何對象打印完整鍵值對的另一種方法是這樣的:

package main

import (
    "encoding/json"
    "fmt"
)

type Foo struct {
    Jekyl string
    Hyde  string
}

func main() {
    bar := Foo{Jekyl: "good", Hyde: "evil"}
    b, err := json.Marshal(bar)
    if err != nil {
        fmt.Println("error marshaling object")
        return
    }
    fmt.Println("bar data : ", string(b))
}

輸出:

 bar data :  {"Jekyl":"good","Hyde":"evil"}

去游樂場參考: https//play.golang.org/p/VJZNmpC_wNJ

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM