2014-11-25 27 views
23

Có gì đó giống như Ruby 's awesome_print trong Golang?Biến golang in ấn khá

Ví dụ trong ruby ​​bạn có thể viết:

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

đầu ra sẽ là:

{ 
    "a" => 1, 
    "b" => 2 
} 

điều gần gũi nhất mà tôi có thể tìm thấy là Printf("%#v", x)

+2

I như [go-spew] (https://github.com/davecgh/go-spew). –

+2

Nếu gói bên ngoài có thể chấp nhận được, hãy xem xét [pretty] (http://godoc.org/github.com/kr/pretty#example-package). – Mark

Trả lời

45

Nếu mục tiêu của bạn là để tránh nhập khẩu một gói của bên thứ ba, tùy chọn khác của bạn là sử dụng 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)) 

Output:

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

Mẫu làm việc: http://play.golang.org/p/SNdn7DsBjy

+0

Thử nghiệm nhiều mức độ lưu ý. https://play.golang.org/p/d3nO4Rht90 – Xeoncross

+0

Marshal gặp rắc rối giới thiệu khi có cấu trúc tùy chỉnh (lỗi loại không được hỗ trợ). Có cách nào dễ dàng để khắc phục điều đó không? – etang

+0

@etang Bạn sẽ phải trình bày một ví dụ đơn giản cho tôi để cung cấp cho bạn một câu trả lời tốt hơn (có lẽ trong Sân chơi?). Tôi tưởng tượng bạn sẽ phải thực hiện một trong các giao diện gói JSON để unmarshalling loại của bạn nếu nó trở nên phức tạp. –

9

Nevermind, tôi thấy một: https://github.com/davecgh/go-spew

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

sẽ đưa ra một sản lượng:

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