You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
golang 没有采取`try-catch` 机制,在golang中不存在异常的说法。而错误被分为三类:
|
|
|
|
|
+ error 部分流程出错,需要处理
|
|
|
|
|
+ panic 很严重的问题,程序应该在处理完问题后立即退出
|
|
|
|
|
+ fatal 非常致命的问题,程序应该立即退出
|
|
|
|
|
|
|
|
|
|
# error
|
|
|
|
|
打开一个名为`README.txt`的文件,如果打开失败函数将会返回一个错误,输出错误信息,如果错误为空的话那么就是打开成功,输出文件名。这样看起来似乎是要比`try-catch`简洁一些,那如果有特别多的函数调用,将会到处都充斥着`if err != nil` 这种判断语句,外界对于Go主要诟病的点几乎都在错误处理上了,说到底并没有比`try-catch`好到哪里去
|
|
|
|
|
```golang
|
|
|
|
|
func main() {
|
|
|
|
|
// 打开一个文件
|
|
|
|
|
if file, err := os.Open("README.txt"); err != nil {
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
} else {
|
|
|
|
|
fmt.Println(file.Name())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
error属于是一种正常的流程错误,它的出现是可以被接受的,大多数情况下应该对其进行处理,当然也可以忽略不管,error的严重级别不足以停止整个程序的运行。`error`本身是一个预定义的接口,该接口下只有一个方法`Error()`,该方法的返回值是字符串,用于输出错误信息
|
|
|
|
|
```golang
|
|
|
|
|
type error interface {
|
|
|
|
|
Error() string
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 1.error的创建
|
|
|
|
|
```golang
|
|
|
|
|
//第一种
|
|
|
|
|
err := errors.New("这是一个错误")
|
|
|
|
|
//第二种
|
|
|
|
|
err := fmt.Errorf("这是%d个格式化参数的的错误", 1)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 2.自定义error
|
|
|
|
|
# panic
|
|
|
|
|
|
|
|
|
|
# fatal
|