Go error只是一个interface,只有一个方法Error() string

errors.New()返回的是一个指针,是区分相同错误内容,不同的内存地址对应的对象

Go的定义核心在于:error are values, 它就是普通的一个值

建议:返回错误内容包含:包名: 具体的错误信息,以便后续的错误跟踪

其他语言的报错机制

1.C语言:只有单参数返回值,通过返回为int表示成功和失败

2.C++: 引入了exception,但无法知道会产生具体什么样的异常,只能通过对方的开发文档来确定错误处理方式

3.JAVA: 引入了checked exception,函数方法的所有者必须声明,然后调用者必须处理

Go error的处理方式

支持多参数返回,拥有独特的panic机制,并且区别与普通的error(等同于fatal error,表示不可恢复的错误),所有的处理都交由调用这来处理,通常的返回方式:值和error,使用时先判断error再使用返回的值

revovery可以捕获到panic,但因错误的严重性,所有最好不要做其他让程序恢复的操作,可以做致命错误的日志记录

对于不可恢复,索引越界类似致命的错误我们才是使用panic,其他时候我尽量还是用error来进行错误判断

Go错误的优点

1.简单

2.考虑失败,而不是成功

3.没有隐藏的控制流

4.完全由自己来控制error

5.Error are values