> golang没有try catch 使用defer+recover来处理异常
func test() int {
defer func() {
err := recover() //捕获异常
if err != nil {
fmt.Println("err=", err)
}
}()
num1 := 10
num2 := 0
res := num1 / num2
return res
}
> 自定义错误errors.New panic
errors.new("错误说明"),会返回一个error类型的值
panic内置函数,接受一个interface{}类型的值(也就是任何值)作为参数,可以接收error类型的变量,输出错误信息,并退出程序
```
package main
import (
"errors"
"fmt"
)
func readConf(filename string) (err error) {
if filename == "config.ini" {
return nil
}
return errors.New("文件名不正确")
}
func test02() {
res := readConf("config1.ini")
if res != nil {
panic(res) //不继续往下执行
}
fmt.Println("test02()继续执行")
}
func main() {
test02()
fmt.Println("main()继续执行") //此处无法执行
}
```
![](https://img.kancloud.cn/9c/0a/9c0a1313a3100afff33a403ce7d33641_388x174.png)
- 数据类型
- 数组array
- 切片slice
- 字符串string
- map
- 结构体struct
- 方法func
- 匿名结构体(继承)
- 字段别名
- 接口interface
- 常量
- 基础语法
- 循环for
- 遍历
- 函数func
- defer
- 异常处理error
- 访问范围
- 包
- 类型断言
- 文件
- 打开文件
- 读取文件
- 写文件
- 判断是否存在
- 拷贝文件
- JSON
- 序列化
- 反序列化
- 命令行
- 杂项
- Windows下配置加速
- 相关链接
- 占位符
- 随机数rand
- 单元测试
- goroutine
- 并发和并行
- 协程和主线程
- MPG模式
- 设置CPU数量
- 全局互斥锁
- 管道
- 示例1
- 示例2
- select
- 异常捕获
- 反射
- 示例
- 示例-改变值
- 网络编程
- TCP编程
- 示例一
- redis