有这种写法,定义一个全局变量的 error ,在用到的时候直接返回

1
var ErrNotFound = errors.New("404")

这样写有个隐患,如果有人在某个方法里写了句

1
errNotFound = nil

那么这个 error 就彻底废了。关键是一个 err 返回了 nil,你排查线上问题会走错方向。

解决方案

可以用常量来做这个全局变量:

1
2
3
4
5
type xErr string
func (err xErr) Error() string {
return string(err)
}
const ErrNotFound = xErr("404")