Go 以适合复制/粘贴到测试的格式打印结构,如;wantResult“;价值

Go 以适合复制/粘贴到测试的格式打印结构,如;wantResult“;价值,go,Go,我需要为一个函数编写测试,其中返回的结果是一个大结构片。这意味着您需要编写一个测试,其中“wantResult”应该填充所有这些结构。填充它的最快方法是调用函数并将结果复制/粘贴到测试中。然而,我发现要以合适的格式打印一个结构体并不是一件容易的事,在这种格式中,您可以复制/粘贴它 fmt.Printf("%v",myStruct) 将打印如下内容: [{field A field B field C}{field A field B field C}]即字符串没有引号,字段之间没有逗号 fmt

我需要为一个函数编写测试,其中返回的结果是一个大结构片。这意味着您需要编写一个测试,其中“wantResult”应该填充所有这些结构。填充它的最快方法是调用函数并将结果复制/粘贴到测试中。然而,我发现要以合适的格式打印一个结构体并不是一件容易的事,在这种格式中,您可以复制/粘贴它

fmt.Printf("%v",myStruct)
将打印如下内容:
[{field A field B field C}{field A field B field C}]
即字符串没有引号,字段之间没有逗号

fmt.Printf("%+v",myStruct)
将打印如下内容:
[{field A:value A field B:value B field C:value C}{field A:value A field B:value B field C:value C}]
-字段之间也没有引号,没有逗号

fmt.Printf("%+v",myStruct)
最后,我提出了反射解决方案,如下所示:

for _, oneStruct := range gotResult {
                s := reflect.ValueOf(&oneStruct).Elem()
    typeOfs := s.Type()
    fmt.Println("{")
    for i := 0; i < s.NumField(); i++ {
        f := s.Field(i)
        switch f.Type().Name() {
        case "string":
                        fmt.Printf("%v:\"%v\",\n", typeOfs.Field(i).Name, f.Interface())
        default :
                        fmt.Printf("%v:%v,\n", typeOfs.Field(i).Name, f.Interface())
        }
    }
    fmt.Println("},")
}
for ux,oneStruct:=范围gotResult{
s:=reflect.ValueOf(&oneStruct.Elem())
typeOfs:=s.Type()
fmt.Println(“{”)
对于i:=0;i

它适用于int、float和string字段类型的简单平面结构。然而,它看起来很麻烦。有人知道更优雅的方法吗?

我会将其作为JSON转储,并将其重新水化。我尝试过类似的解决方案:JSON.MarshalIndent(myStruct,“,”\t”),但它会打印带引号的字段名,这也不适合复制/粘贴。也许,你的意思是别的。你不能复制/粘贴到
.go
文件中,不-不是go,是JSON。但是您可以使用
JSON.Unmarshal
重新摄取您输出的JSON。这并不是说它会对所有情况进行复制+粘贴输出,而是您是否尝试使用
%\v
?它被记录为
值的Go语法表示形式
。否则,您可以按照JimB的建议使用标准序列化格式,或者编写自己的格式化程序,使用
GoString
使用
%\v
。此格式使用包名称限定类型。如果遇到这种情况,您可以手动编辑或使用regexp来清理它。我会将其作为JSON转储并从中重新水化。我尝试过类似的解决方案:JSON.MarshalIndent(myStruct,“,”\t”),但它会打印带引号的字段名,这也不适合复制/粘贴。也许,你的意思是别的。你不能复制/粘贴到
.go
文件中,不-不是go,是JSON。但是您可以使用
JSON.Unmarshal
重新摄取您输出的JSON。这并不是说它会对所有情况进行复制+粘贴输出,而是您是否尝试使用
%\v
?它被记录为
值的Go语法表示形式
。否则,您可以按照JimB的建议使用标准序列化格式,或者编写自己的格式化程序,使用
GoString
使用
%\v
。此格式使用包名称限定类型。如果这妨碍了您,您可以手动编辑或使用regexp进行清理。