首页 > 解决方案 > 以适合复制/粘贴到测试的格式打印结构作为“wantResult”值

问题描述

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

标签: go

解决方案


推荐阅读