Golang:将结构体打印为源代码中的样式

9
这个问题类似,但并非完全相同。
我正在进行一些代码生成,从Go中生成.go文件。我有一个结构体,并且我想生成它的文本表示形式,以便我可以将其作为文字插入到生成的代码中。
因此,如果我有 myVal := SomeStruct{foo : 1, bar : 2},我希望得到字符串"SomeStruct{foo : 1, bar : 2}"
在Go中是否可能实现这一点?
1个回答

18

来自fmt包:

%#v   a Go-syntax representation of the value
这是内置格式化后,从输出中删除包标识符(在此示例中为main.)后,您可以接近的程度。
type T struct {
    A string
    B []byte
}

fmt.Printf("%#v\n", &T{A: "hello", B: []byte("world")})

// out
// &main.T{A:"hello", B:[]uint8{0x77, 0x6f, 0x72, 0x6c, 0x64}}

Run


我尝试过这个,但是当我有 type Foo string{field : Foo("Bar")} 时,它只会将其打印为 {field : "Bar"}。有什么解决方法吗? - jmite
它的类型是 Foo - jmite
1
@jmite:这个还是不能做到全部,嵌套指针只会以%p的形式打印出来,并附带类型信息,而赋值给接口的值只会显示底层类型。如果你想要更详细的输出,就需要手动进行格式化。 - JimB
唉...更正一下,这对于map也有效,我的IDE终端很蠢,没有将其打印为字符串。谢谢。 - Matteo
能否避免打印软件包名称?(在这个例子中只打印&T {A:“hello”,B:[] uint8 {0x77,0x6f,0x72,0x6c,0x64}} - Pioz
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接