String 使用';%漂亮地打印未报告的字段v';

String 使用';%漂亮地打印未报告的字段v';,string,go,struct,pretty-print,String,Go,Struct,Pretty Print,似乎至少用于打印的默认libs(即,fmt)无法很好地打印结构的未报告字段。这可能有一个合乎逻辑的原因 请参见以下示例: 主程序包 进口( “fmt” “github.com/google/uuid” ) 类型foobar结构{ 名称uuid.uuid 名称2 uuid.uuid } func main(){ foobar1:=foobar{Name:uuid.New(),Name:uuid.New()} fmt.Printf(“这是结构:%+v\n”,foobar1) } 给出: 以下是结构

似乎至少用于打印的默认libs(即,
fmt
)无法很好地打印结构的未报告字段。这可能有一个合乎逻辑的原因

请参见以下示例:

主程序包
进口(
“fmt”
“github.com/google/uuid”
)
类型foobar结构{
名称uuid.uuid
名称2 uuid.uuid
}
func main(){
foobar1:=foobar{Name:uuid.New(),Name:uuid.New()}
fmt.Printf(“这是结构:%+v\n”,foobar1)
}
给出:

以下是结构:{Name:d5aa42e2-fba9-4f86-8ee9-be2af55d3367 Name:[203 79 55 189 185 158 74 13 134 47 113 190 62 49 202]}
请注意,字段
name2
使用其Stringer接口打印得不好

在本例中,
struct foobar
上使用
String()String
函数的唯一选项是什么


我正试着用最自动化的方式来做这件事。如果没有沉重的日志框架和/或反射就无法完成,那么这也是一个有效的答案。

引用以下文件包:

当打印结构时,fmt不能,因此不会调用格式化方法,例如未报告字段上的Error或String

最简单的方法是在
foobar
上实现
String()String

func (f foobar) String() string {
    return fmt.Sprint("{Name:", f.Name, " name2:", f.name2, "}")
}
测试它:

foobar1 := foobar{Name: uuid.New(), name2: uuid.New()}

fmt.Printf("Here is the struct: %+v\n", foobar1)
输出(在上尝试):

以下是结构:{Name:b658e3d6-b06e-4ea0-846c-4ff7f80352e7 Name:dfcccba6-242c-4d94-a772-0935796b1dcd}

我怎么会错过:羞耻: