henryspace

记录精彩的程序人生 开始使用

Part 20 - Go 语言学习 - 错误处理

错误处理

  1. panic()函数,直接终止程序执行
  • 停止当前函数执行
  • 一直向上返回,执行每一层的defer,相当于其他语言的throw
  • 如果没有遇见recover,程序退出
  1. fmt.Println(); return 通过return结束执行
  2. err interface
func writeFile(filename string) {
	file, err := os.OpenFile(filename, os.O_EXCL|os.O_CREATE, 0666)
	if err != nil {
		if pathError, ok := err.(*os.PathError); !ok {
			panic(err)
		}else {
			fmt.Println(pathError.Op,pathError.Path,pathError.Err)
		}
		return
	}
	defer file.Close()

	writer := bufio.NewWriter(file)
	defer writer.Flush()
}
  1. recover
  • 仅在defer调用中使用
  • 获取panic的值
  • 如果无法处理,可重新panic
func tryRecover() {
	defer func() {
		r := recover()
		if err, ok:= r.(error); ok {
			fmt.Println("Error occured:", err)
		}else {
			panic(r)
		}
	}()
	panic(errors.New("this is an error"))
}

func main()  {
	tryRecover()
}
评论
留下你的脚步