在应用程序的每个模块中对错误(常量错误)进行分组的好方法

标签 go error-handling

我有一个 Go 应用程序(Web 服务),它会像这样在 json 中返回错误:

{errorString: "internal server error"}

这不行,因为“内部服务器错误”只是一些对客户端无用的程序员错误字符串。解决方法是添加错误代码:

{errCode: 1, errorString: "internal server error"}

现在,客户端知道 1 表示“内部服务器错误”并且可以根据需要进行处理。例如,显示用户消息“内部服务器错误”或(在我的例子中)相同的俄语。

好的。

所以,显然我需要一些描述所有错误常量的文件。 对于前。错误.go

const (
   ErrNo = iota

   // Common Errors
   ErrNotFound
   ErrInternalServerError

   **// More specified errors**
)

问题出在更多指定的错误部分。

我有两种方法:

  1. 将所有错误定义放在一个文件 errors.go 中
  2. 尝试将特定错误放入每个相关文件中:

我的 Controller 在 package server 中有几个文件:

clienthandler.go——用于客户端请求, orderhandler.go——用于订单请求等。

特定的客户端错误必须放在clienthandler.go中,订单错误放在orderhandler.go中

但是如何实现呢?

我知道一个简单的解决方案: 为每个 Controller 取一些最大错误数,例如 1000。

客户端处理器.go

package server

const (
   ErrCheckIdCity = 1000*1 + iota
   ErrCheckName
)

也就是为这个文件保留了 1000 个错误(从 1000 到 1999)

orderhandler.go

package server

const (
   ErrCheckIdCity = 1000*2 + iota
   ErrCheckItem
)

也就是为这个文件保留了 1000 个错误(从 2000 到 2999)

但缺点是我们将每个 Controller 的错误限制为 1000 个

也许还有更好的方法? 或者我只需要使用一个全局 errros.go 文件)?

最佳答案

将每个错误放在它的起源处并将其导出。

参见 link来 self 的评论。

var ErrInvalidParam = fmt.Errorf(“invalid parameter [%s]”, param)

如果要添加错误代码,请创建一个新类型 satisfying the error interface并添加适当的成员,如 errorCode 或相关数据。

如果需要,创建一个构建方法作为帮助程序,类似于 errors.New

关于在应用程序的每个模块中对错误(常量错误)进行分组的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34334276/

相关文章:

Python 继续使用 requests 库处理 gaierror

python - 忽略 Python 中的类型错误

php - 让PHP错误出路

go - 匿名结构无法使用复合文字进行编译

返回所有错误

go - 如何从 int 转换为 hex

go - TestMain 未运行

python - 我应该如何处理这个IndexError

go - 确保 Go Process 中调用的可执行文件在 Process 被杀死时被杀死

go - 如何在Go中刷新tcp套接字?