例如,在ruby中,您可以编写:
1 2 3 | require 'ap' x = {a:1,b:2} // also works for class ap x |
输出将是:
1 2 3 4 | { "a" => 1, "b" => 2 } |
我能找到的最接近的东西是
- 如果可以接受外部包装,请考虑使用。
- 我喜欢喷鼻涕。
如果您的目标是避免导入第三方程序包,则另一个选择是使用json.MarshalIndent:
1 2 3 4 5 6 | x := map[string]interface{}{"a": 1,"b": 2} b, err := json.MarshalIndent(x,""," ") if err != nil { fmt.Println("error:", err) } fmt.Print(string(b)) |
输出:
1 2 3 4 | { "a": 1, "b": 2 } |
工作示例:http://play.golang.org/p/SNdn7DsBjy
- 测试多个缩进级别。 play.golang.org/p/d3nO4Rht90
- 当存在自定义结构(不支持的类型错误)时,元帅会遇到入门麻烦。 有任何简单的方法可以解决此问题?
- @etang您必须为我提供一个简单的示例,以便为您提供更好的答案(也许在操场上?)。 我想您必须实现JSON包接口之一才能在类型变得复杂时将其解组。
没关系,我找到了一个:https://github.com/davecgh/go-spew
1 2 3 | // import"github.com/davecgh/go-spew/spew" x := map[string]interface{}{"a":1,"b":2} spew.Dump(x) |
将给出输出:
1 2 3 4 | (map[string]interface {}) (len=2) { (string) (len=1)"a": (int) 1, (string) (len=1)"b": (int) 2 } |
我上来使用这样的代码段:
1 2 3 4 5 6 7 8 9 10 11 12 | 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) } } |
输出将如下所示:
1 2 | short_key: value1 really_long_key: value2 |
告诉我,是否有一些更简单的方法可以进行相同的对齐。
-
您可以使用
fmt.Printf("%*s: %s", maxLenKey, k, v) 避免strings.Repeat 调用和所有此类串联。