go - 返回自定义错误类型与仅创建新错误
问题描述
让我们假设为了简单起见,我有一个简单的函数,它只是尝试基于作为参数传递的字符串打开文件(不要依赖文件打开过程的简单性,因为实际示例会更加复杂)
func retrieveConfig(fs billy.Filesystem, app string) (Spec, error) {
var v Spec
filename := "releases/" + app + ".yaml"
file, err := fs.Open(filename)
if err != nil {
errOpenFile := ErrOpeningConfigFile{filename}
return Spec{}, new errOpenFile{filename}
}
这是我正在使用的自定义错误的定义
type ErrOpeningConfigFile struct {
s string
}
func (errConfigFileNotFound *ErrOpeningConfigFile) Error() string {
return fmt.Sprintf("Error opening configuration file %s")
}
我考虑采用这种方法,因为我的想法是它会提供更多的覆盖率并使核心更易于测试。
我现在可以更轻松地测试错误路径,因为我可以在单元测试中对自定义错误键入 assert。
然而,这肯定会增加代码库。
我认为相反的方法是
return nil, errors.New("Configuration file not found")
这会限制代码,但会使测试更加笨拙(或更窄的范围)。
这样做的适当(或惯用的方式)是什么?
解决方案
推荐阅读
- php - php shuffle 关联数组的一部分
- javascript - 使用 HighCharts 动态更新同一图表上的两个系列
- javascript - 使用 BehaviorSubject 重新加载刷新期间的角度视图组件数据丢失
- r - 使用 usmap 功能去除县界
- html - 中心牌但有左对齐?
- jqgrid - jqGrid,为动态下拉内联编辑设置初始值
- c# - 无法加载类型“IdentityModel.Client.DiscoveryClient”
- javascript - ReactJS 组件不显示
- android - 如何更改和保存切换首选项摘要
- java - 如何将 Spring Cloud Stream 功能 Bean 连接到 Kafka Binder?