我有一个Go应用程序(Web服务),它在json中返回错误,如下所示:
{errorString: "internal server error"}
这不好,因为“内部服务器错误”只是一些程序员错误字符串对客户端无用。解决方案是添加错误代码:
{errCode: 1, errorString: "internal server error"}
现在,客户端知道1意味着“内部服务器错误”并且可以根据需要进行处理。例如,显示用户消息“内部服务器错误”或(在我的情况下)与俄语相同。
确定。
所以,显然我需要一些文件来描述所有的错误常量。 对于前者errors.go
const (
ErrNo = iota
// Common Errors
ErrNotFound
ErrInternalServerError
**// More specified errors**
)
问题出在更多指定错误部分。
我有两种方式:
我的控制器分为包服务器中的几个文件:
clienthandler.go - 用于客户端请求, orderhandler.go - 用于订单请求等。
特定客户端错误必须是clienthandler.go中的位置,orderhandler.go中的订单错误
但它是如何实现的?
我知道一个简单的解决方案: 为每个控制器记录一些最大错误数,例如1000。
clienthandler.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)
但不利的是,我们每个控制器限制自己1000个错误
可能是一些更好的方式吗? 或者我只需要使用一个全局的errros.go文件)?答案 0 :(得分:3)
将每个错误放在原始位置并导出。
请参阅我的评论中的link。
var ErrInvalidParam = fmt.Errorf(“invalid parameter [%s]”, param)
如果要添加错误代码,请创建新类型satisfying the error interface并添加相应的成员,如errorCode或相关数据。
如果需要,可以将构建方法创建为帮助程序,类似于errors.New