我需要为返回结果是大结构片的函数编写测试。这意味着您需要编写一个测试,其中“ 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}]
-也没有引号,字段之间没有逗号。
最后,我想出了如下反射方案:
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("},")
}
它对于具有int,float和string字段类型的简单平面结构很好用。但是,它看起来很麻烦。有人为此目的知道些更优雅的东西吗?