漂亮的印刷golang变量

时间:2014-11-25 02:36:58

标签: go pretty-print

Ruby中是否有类似awesome_print&{39} Golang的内容?

例如在红宝石中你可以写:

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

{ 
  "a" => 1,
  "b" => 2
}
我能找到的最接近的是Printf("%#v", x)

5 个答案:

答案 0 :(得分:67)

如果您的目标是避免导入第三方软件包,则另一种方法是使用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

答案 1 :(得分:14)

没关系,我找到了一个: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
}

答案 2 :(得分:2)

我来像这样使用代码段:

func printMap(m map[string]string) {
    var maxLenKey int
    for k, _ := range m {
        if len(k) > maxLenKey {
            maxLenKey = len(k)
        }
    }

    for k, v := range m {
        fmt.Println(k + ": " + strings.Repeat(" ", maxLenKey - len(k)) + v)
    }
}

输出将如下所示:

short_key:       value1
really_long_key: value2

告诉我,如果有一些更简单的方法可以进行相同的对齐。

答案 3 :(得分:0)

我刚刚根据 Simons 的回答写了一个简单的函数:

func dump(data interface{}){
    b,_:=json.MarshalIndent(data, "", "  ")
    fmt.Print(string(b))
}

答案 4 :(得分:0)

如果您想要漂亮的彩色输出,可以使用 pp

https://github.com/k0kubun/pp

import "github.com/k0kubun/pp"
...
pp.Print(m)

pp preview