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