我有一个 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**
)
问题出在更多指定的错误部分。
我有两种方法:
- 将所有错误定义放在一个文件 errors.go 中
- 尝试将特定错误放入每个相关文件中:
我的 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/