我有一个golang结构,并创建了一个String()
方法,用于程序的正常操作。我现在想要查看结构的全部内容。我尝试了通常的%+v
格式,但它似乎使用String()
方法而不是向我显示所有字段。如何输出原始结构数据?
示例:https://play.golang.org/p/SxTVOtwVV-9
package main
import (
"fmt"
)
type Foo struct {
Jekyl string
Hyde string
}
func (foo Foo) String() string {
return foo.Jekyl // how I want it to show in the rest of the program
}
func main() {
bar := Foo{Jekyl: "good", Hyde: "evil"}
fmt.Printf("%+v", bar) // debugging to see what's going on, can't see the evil side
}
输出
good
但我想看看你没有实现String()方法得到的东西
{Jekyl:good Hyde:evil}
答案 0 :(得分:9)
使用%#v
格式
fmt.Printf("%#v", bar)
输出:
main.Foo{Jekyl:"good", Hyde:"evil"}
答案 1 :(得分:1)
虽然您的答案是正确的,但通常的做法是使用其他类型去除结构的所有方法并使用其他方法(通常用于编组/解组)。
如果某个类型定义为type stripped Foo
,则不再使用方法Foo.String()
。
代码:https://play.golang.org/p/Ba2VvLAm92a
输出:{Jekyl:good Hyde:evil}
答案 2 :(得分:0)
为任何对象打印完整键值对的另一种方法是这样的:
package main
import (
"encoding/json"
"fmt"
)
type Foo struct {
Jekyl string
Hyde string
}
func main() {
bar := Foo{Jekyl: "good", Hyde: "evil"}
b, err := json.Marshal(bar)
if err != nil {
fmt.Println("error marshaling object")
return
}
fmt.Println("bar data : ", string(b))
}
输出:
bar data : {"Jekyl":"good","Hyde":"evil"}