Golang错误处理相关

错误处理
一个简单的文件打开操作demo

	_, err := os.OpenFile(filename, os.O_EXCL|os.O_CREATE, 0666)
	if err != nil {
		if pahErr, ok := err.(*os.PathError); !ok {
			panic(err)
		}else{
			fmt.Printf("%s %s %s\n",pahErr.Path,pahErr.Op,pahErr.Err)
		}
		return
	}
针对返回任务的错误信息进行了打印
fmt.Printf("%s %s %s\n",pahErr.Path,pahErr.Op,pahErr.Err)

统一实现任务处理的demo

type appHandler func(w http.ResponseWriter, req *http.Request) error

// errWrapper 错误处理
func errWrapper(handler appHandler) func(http.ResponseWriter, *http.Request){
	return func(w http.ResponseWriter, req *http.Request){
		err := handler(w, req)
		if err != nil {
			code := http.StatusOK
			switch {
			case os.IsNotExist(err):
				code = http.StatusNotFound
			case os.IsPermission(err):
				code = http.StatusForbidden
			default:
				code = http.StatusInternalServerError
			}
			http.Error(w, http.StatusText(code), code)
		}
	}
}
// HandleFileListing 
func HandleFileListing(w http.ResponseWriter, req *http.Request) error{
	path := req.URL.Path[len("/list/"):]
	file, err := os.Open(path)
	if err != nil {
		return err
	}
	defer file.Close()

	all, err := ioutil.ReadAll(file)
	if err != nil {
		return err
	}
	w.Write(all)
	return nil
}

panic兜底操作— recover

	defer func(){
		r := recover()
		if err, ok := r.(error); ok {
			fmt.Println(err)
		} else {
			panic(err)
		}
	}()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值