以适合复制/粘贴的格式打印结构以测试为“ wantResult”值

时间:2019-10-30 18:14:36

标签: go

我需要为返回结果是大结构片的函数编写测试。这意味着您需要编写一个测试,其中“ 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字段类型的简单平面结构很好用。但是,它看起来很麻烦。有人为此目的知道些更优雅的东西吗?

0 个答案:

没有答案