golang 的 error 要看你用什么角度去看, 如果你是用 c /lua 这样的, 那么 golang 的 error 只有改进
但是一定要同 python/c#/java 的 try/exception 机制去比, 就陷入脑残粉的怪圈了
github 有很多对错误改进的库,比方说
github.com/juju/errors, 其中就反映了 error 的不足
比方说 errors.Trace 方法, 会在原来的 err 对象上再增加代码行, 比方说 errors.Annotate 会在原来的 err 上增加描述, 比方说我现在看到到一个 orm 库 gorm, 它在找不到记录时返回的异常都是 record not found, 如果代码中有多行返回这个异常, 不在原来的错误添加描述而是直接返回其异常是没有办法定位的
这里还要吐槽一下 golang 的错误堆栈, 同 python 完全没法比, 用过的人自有体会
上面有兄弟说到 try/catch, 服务器端开发其实不 catch 异常的, 都是直接抛出, 最多捕获一般也是在发送给客户端时捕获一下,然后打印异常到日志, 也就是说有些不正常的情况是依赖系统或库抛出的异常的, 比方说查询时 sql 用了一个字段名打错了,python/java 之类的不会在这行中取捕获这种异常, 但 golang 就一定要, 否则出错在就在下面的行, 让你莫名其妙
最后别信 golang 的开发效率, 同 python 比是完全不可能的, 拿关键的 orm 而言, 没有一个库的设计能同 sqlalchemy 这种设计高度相提并论的, 在开发数据库应用时,会很痛苦.