go - 以适合复制/粘贴到测试的格式打印结构作为“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 字段类型的简单平面结构。但是,它看起来很麻烦。有人知道为此目的更优雅的东西吗?
解决方案
推荐阅读
- python - "a"/"append" 仅一次到 yaml 文件
- c - 关于C中函数指针的问题?
- viewdidload - iOS 15 Beta keyWindow 在 viewDidLoad 中不可用
- android - Google 登录不适用于客户端 ID
- javascript - 事件源 removeEventlistener 未移除事件
- pipe - ImportError:无法从“graphql”导入名称“ResolveInfo”
- powershell - 从网络共享文件加载类(.ps1 文件)
- amazon-s3 - Gitlab 备份和恢复的最佳策略?
- python - 如何在pydeequ中传递直方图分箱udf?
- windows - 如何在 Windows 中“仅”获取服务“状态”?(“systemctl is-active service”的替代方案)