panic来自被调函数的信号,表示发生了某个已知的bug。一段良好的程序永远不应该发生panic异常
对于大部分程序而言,永远无法保证能够成功运行,因为错误原因往往超出程序员的控制范围。任何进行io操作的程序都会面临出错的可能,只有无经验的程序员才会相信读写操作不会失败。
处理错误的五种策略:
1. 传递错误
response, err := http.Get(url)
if err != nil {
return nil, err
}
2. 重新尝试错误的操作:
对于偶然性发生的错误如网络请求超时、数据库连接超时,可以进行重试,但需要限制重试的时间或次数
3. 输出错误并结束程序
response, err := http.Get(url)
if err != nil {
fmt.Fprintf(os.Stderr, "fetch:%v
", err)
os.Exit(1)
}
4. 输出错误,继续执行
if err := Ping(); err != nil {
log.Printf("ping failed: %v; networking disabled", err)
}
5. 直接忽略错误
比如数据库中一个分类删除后,对应的分类目录也要被删除,但不管这个目录是否被成功删除,都不影响这个分类删除的基本目的,出现这种情况,返回相应错误消息供调用者记录而整体结果不受影响。