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