2014-11-25 87 views
23

有沒有像Rubyawesome_printGolang漂亮的印刷golang變量

例如,在Ruby中,你可以寫:

require 'ap' 
x = {a:1,b:2} // also works for class 
ap x 

輸出將是:

{ 
    "a" => 1, 
    "b" => 2 
} 
我能找到

最接近的事是Printf("%#v", x)

+2

I像[go-spew](https://github.com/davecgh/go-spew)。 – 2014-11-25 12:36:05

+2

如果外部軟件包可以接受,請考慮[漂亮](http://godoc.org/github.com/kr/pretty#example-package)。 – Mark 2014-11-25 03:06:46

回答

45

如果你的目標是避免導入第三方包,你的其他選擇是使用json.MarshalIndent

x := map[string]interface{}{"a": 1, "b": 2} 
b, err := json.MarshalIndent(x, "", " ") 
if err != nil { 
    fmt.Println("error:", err) 
} 
fmt.Print(string(b)) 

輸出:

{ 
    "a": 1, 
    "b": 2 
} 

工作樣品:http://play.golang.org/p/SNdn7DsBjy

+0

測試多級縮進。 https://play.golang.org/p/d3nO4Rht90 – Xeoncross 2016-12-19 15:23:51

+0

當存在自定義結構(不受支持的類型錯誤)時,Marshal會引入麻煩。任何簡單的方法來解決? – etang 2017-08-09 00:18:02

+0

@etang你將不得不爲我演示一個簡單的例子來給你一個更好的答案(也許在遊樂場?)。我想如果你的類型變得複雜的話,你將不得不實現一個JSON包接口來解編你的類型。 – 2017-08-09 00:40:36

9

沒關係,我找到了一個:https://github.com/davecgh/go-spew

// import "github.com/davecgh/go-spew/spew" 
x := map[string]interface{}{"a":1,"b":2} 
spew.Dump(x) 

會給出一個輸出:

(map[string]interface {}) (len=2) { 
(string) (len=1) "a": (int) 1, 
(string) (len=1) "b": (int) 2 
}