web-dev-qa-db-ja.com

きれいに印刷するgolang変数

RubyGolangの_awesome_print_のようなものはありますか?

たとえば、Rubyでは次のように記述できます。

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

出力は次のようになります。

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

私が見つけた最も近いものはPrintf("%#v", x)です

33
Kokizzu

サードパーティのパッケージのインポートを回避することが目標の場合、他のオプションは 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

76
Simon Whitehead

気にしないで、私はそれを見つけました: 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
}
17
Kokizzu

私はこのようなスニペットを使用するようになりました:

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

同じアライメントを行う簡単な方法があれば教えてください。

2
andstepko