错误处理机制:

先看一段代码:看看输出什么?

package main
import "fmt"

func test() {
  num1 := 10
  num2 := 0
  res := num1 / num2
  fmt.Println("res=",res)
}

func main() {
  test()
  fmt.Println("下面的代码和逻辑...")
}

对上面代码的总结:

  1)在默认情况下,当发生错误后(panic),程序就会退出(崩溃了)

  2)如果我们希望,当发生错误后,可以捕获到错误,保证程序可以继续执行。还可以在捕获到错误后,给管理员一个提示(邮件,短信...)

  3)这里引出我们要讲的错误处理机制

基本说明:

  1)Go语言追求简洁优雅,所以,Go语言不支持传统的 try...catch...finally 这种处理

  2)Go中引入的处理方式为: defer, panic, recover

  3)这几个异常的使用场景可以这么简单描述:Go中可以抛出一个panic的异常,然后在defer 中通过 recover (内置函数) 捕获这个异常,然后正常处理

针对上面的错误代码进行处理: 使用defer 和 recover 来处理错误

func test() {
  //使用defer + recover 来捕获和处理异常
  defer func () {
    //err := recover() //recover()内置函数,可以捕获异常
    if err := recover(); err != nil { //说明捕获到错误
      fmt.Println("err=", err)
      //这里就可将错误信息发送给管理员
      fmt.Println("发送邮件给admin@sohu.com")
    }
  }()
  num1 := 10
  num2 := 0
  res := num1 / num2
  fmt.Println("res=",res)
}

func main() {
  test()
  for {
    fmt.Println("main()下面的代码和逻辑...")
    time.Sleep(time.Second)
  }
}

错误处理的好处:

进行错误处理后,程序不会轻易挂掉,如果加入预警代码,就可以让程序更加的健壮。

自定义错误:

Go程序中,也支持自定义错误,使用errors.New 和 panic 内置函数。

  1)errors.New("错误说明"),会返回一个error类型的值,表示一个错误
  2)panic内置函数,接受一个interface{}类型的值(也就是任何值了) 作为参数。可以接受error类型的变量,输出错误信息,并退出程序。

案例演示:

package main
import (
  "fmt"
  "errors"
)

//函数去读取一配置文件init.conf的信息
//如果文件名传入不正确,我们就返回一个自定义的错误
func readConf(name string) (err error) {
  if name == "config.ini" {
    //读取...
    return nil
  } else {
    //返回一个自定义错误
    return errors.New("读取文件错误...")
  }
}

func test02() {
  err := readConf("config2.ini")
  if err != nil {
    //如果读取文件发生错误,就输出这个错误,并终止程序
    panic(err)
  }
  fmt.Println("test02()继续执行...")
}

func main() {
  test02()
  fmt.Println("test02()继续执行...")
}

Go错误处理机制及自定义错误的更多相关文章

  1. C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路

    C#不用union,而是有更好的方式实现   用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...

  2. ASP.NET的错误处理机制之一(概念)

    对Web应用程序来说,发生不可预知的错误和异常在所难免,我们必须为Web程序提供错误处理机制.当错误发生时,我们必须做好两件事情:一是将错误信息记录日志,发邮件通知网站维护人员,方便技术人员对错误进行 ...

  3. PHP中的错误处理机制

    常见的三种错误: 1.Notice :通知性错误,最小的错误,当发生通知性错误时,会弹出一个提示信息.不会中断代码的执行. 错误代码: #例如Notice: 2.Warning:警告性错误,当发生警告 ...

  4. WebApi实现自定义错误日志

    一.Mvc错误处理默认有添加HandleErrorAttribute默认的过滤器,但是我们有可能要捕捉这个错误并记录系统日志那么这个过滤器就不够用了,所以我们要自定义Mvc及Web Api各自的错误处 ...

  5. 自定义错误信息并写入到Elmah

    在ap.net Web项目中一直使用Elmah进行日志记录, 但一直有一个问题困扰我很久,那就是我如何自己生成一个错误并记录到Elmah里去. 你知道有时你需要在项目中生成一个错误用于一些特殊的需求 ...

  6. MVC4 自定义错误页面(转)

    一.概述 MVC4框架自带了定义错误页,该页面位于Shared/Error,该页面能够显示系统未能捕获的异常,如何才能使用该页面: 二.使用步骤: 1.配置WebConfig文件,在System.We ...

  7. javascript中的错误处理机制

    × 目录 [1]对象 [2]类型 [3]事件[4]throw[5]try[6]常见错误 前面的话 错误处理对于web应用程序开发至关重要,不能提前预测到可能发生的错误,不能提前采取恢复策略,可能导致较 ...

  8. MVC4 自定义错误页面(三)

    一.概述 MVC4框架自带了定义错误页,该页面位于Shared/Error,该页面能够显示系统未能捕获的异常,如何才能使用该页面: 二.使用步骤: 1.配置WebConfig文件,在System.We ...

  9. PHP 错误处理机制

    在日常的项目开发过程中,总是会出现一些我们意想不到的异常错误,如果我们对此没有进行相对完善的处理,那么程序看上去也很不专业,也很可能就会成为别人攻击系统的有效信息:有些错误异常会终止脚本执行,这个时候 ...

随机推荐

  1. jquery遍历table中每个td的值

    废话不说直接上: <table style="border:1px solid #ccc">        <tr>            <td&g ...

  2. python基础--内置函数map

    num_1=[1,2,10,5,3,7] # num_2=[] # for i in num_1: # num_2.append(i**2) # print(num_2) # def map_test ...

  3. 22pygame 安装

    实战步骤 pygame 快速体验 飞机大战 实战 确认模块 --pygame pygame 就是一个 Python 模块, 专为电子游戏设计 提示 : 学习第三方模块, 通常最好的参考资料就在官方网站 ...

  4. thinkphp 响应对象response

    1.可以通过修改配置文件的 default_return_type修改输出类型 // 默认输出类型 'default_return_type' => 'html', 2. 可以通过Config类 ...

  5. html+css+javascript学习记录1

    <p> 最近在学一部分前端,知识点很多,却没怎么系统地应用过,因而理解可能不够深吧.所以我想做点片段似的东西,不懂的再在网上搜一搜,这样可能会更有意思点,所以做了这个记录,希望自己坚持下去 ...

  6. RestTemplate 发送post请求

    springboot使用restTemplate post提交值 restTemplate post值 post提交有 FormData和Payload 两种形式: 第一种是formdata形式,在h ...

  7. [洛谷P1095]NOIP2007 普及组T3 守望者的逃离

    问题描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会 ...

  8. python学习笔记(六)函数

    1.函数是什么? 定义:函数是指一组语句的集合通过一个名字(函数名)封装起来,只需调用函数名即可. 2.函数的好处: 简化代码 提高代码的复用性 代码可扩展 3.python中函数的定义: 定义函数使 ...

  9. Xib中用自动布局设置UIScrollView的ContenSize

    1. 在UIScrollView上拖一个UIView 2.设置UIScrollView上下左右约束为0,设置UIView上下左右约束为0,并且设置水平中线约束.那么可以把水平中线约束拖到对应视图,利用 ...

  10. HTML5 游戏引擎的选择

    原生手游市场已是红海,腾讯.网易等寡头独霸天下,H5游戏市场或将成为下一个风口.据笔者所知,很多H5游戏开发团队由于选择引擎不慎导致项目甚至团队夭折.如何选择适合团队和项目的引擎,笔者通过学习和项目实 ...