Go错误处理

Go 语言通过内置的错误接口提供了非常简单的错误处理机制。

error类型是一个接口类型,这是它的定义:

type error interface {Error() string
}

我们可以在编码中通过实现 error 接口类型来生成错误信息。

函数通常在最后的返回值中返回错误信息。使用errors.New 可返回一个错误信息:

func Sqrt(f float64) (float64, error) {if f < 0 {return 0, errors.New("math: square root of negative number")}// 其他逻辑实现
}

  在下面的例子中,我们在调用 Sqrt 的时候传递的一个负数,然后就得到了non-nil 的 error 对象,将此对象与 nil 比较,结果为 true,所以 fmt.Println (fmt包在处理error时会调用Error方法)被调用,以输出错误,请看下面调用的示例代码:

result, err:= Sqrt(-1)if err != nil {fmt.Println(err)
}

具体实例如下:

package mainimport "fmt"// 定义一个 DivideError 结构
type DivideError struct {dividee int    //除数divider int    //被除数
}// 为DivideError绑定Error方法,实现 error 接口
func (de *DivideError)Error() string {//使用单反引号可以使输入的内容书写格式更加好看strFormat := `Cannot procceed, the divider is zero.dividee: %ddivider: 0`return fmt.Sprintf(strFormat, de.dividee)
}// 定义 int 类型除法运算的函数
func Divide(varDividee int, varDivider int) (result int, errorMessage string) {if varDivider == 0 {//简单方法的实例化结构体dData := DivideError{dividee: varDividee,divider: varDivider,}errorMessage = dData.Error() //调用方法得到对应错误信息return} else {return varDividee / varDivider, ""}
}func main()  {// 正常情况if result, errorMessage := Divide(100, 6); errorMessage == "" {fmt.Println("100 / 6 = ", result)}// 当除数为0的时候会返回错误信息if _, errorMessage := Divide(100, 0); errorMessage != "" {fmt.Println("errorMessage is : ", errorMessage)}
}

运行结果:

100 / 6 =  16
errorMessage is :  Cannot procceed, the divider is zero.dividee: 100divider: 0

转载于:https://www.cnblogs.com/liang1101/p/6623548.html

GO_10:GO语言基础之error相关推荐

  1. GO语言基础之error

    Go错误处理 Go 语言通过内置的错误接口提供了非常简单的错误处理机制. error类型是一个接口类型,这是它的定义: type error interface {Error() string } 我 ...

  2. 数据分析必备:掌握这个R语言基础包1%的功能让你事半功倍!(附代码)

    来源:大数据 本文约7100字,建议阅读15分钟. 本文介绍了utils包在R语言基础的用途. [ 导读 ]无论数据分析的目的是什么,将数据导入R中的过程都是不可或缺的.毕竟巧妇难为无米之炊.util ...

  3. PL/SQL语言基础

    PL/SQL语言基础 /********************************数据类型*************************************/ %rowtype  (行对 ...

  4. Java核心技术笔记 语言基础

    <Java核心技术 卷Ⅰ> 第3章 Java 的基本程序设计结构 一些规则 类命名:CamelCase 驼峰命名法,以及必须是字母开头,后面跟字母和数字的任意组合: 源代码文件名:必须与公 ...

  5. 黑马程序员C语言基础(第五天)运算符与表达式、程序流程结构、数组和字符串、函数

    https://www.bilibili.com/video/BV15W411K7k6?p=93&spm_id_from=pageDriver 黑马程序员C语言基础(第五天)运算符与表达式.程 ...

  6. 黑马程序员C语言基础(第三天)

    黑马程序员C语言基础(一)第三天 https://www.bilibili.com/video/BV15W411K7k6?p=40 文章目录 低级语言与高级语言 c语言优缺点 c语言应用领域 通过gc ...

  7. declare sql语句_每天10分钟学习T-SQL语言基础(Part 5)

    [数据库技术]| 作者 / Edison Zhou <Microsoft SQL Server 2008技术内幕:T-SQL语言基础>是一本关于T-SQL方面的好书,可能现在我们在京东上都 ...

  8. [GO语言基础] 三.变量声明、数据类型、标识符及编程练习12题

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了Go的编译运行 ...

  9. [GO语言基础] 二.编译运行、语法规范、注释转义及API标准库知识普及

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了什么是GO语言 ...

最新文章

  1. python实战演练_python实战演练(三)购物车程序
  2. 无法打开 configsource 文件
  3. 卸载后的mysql和navicat怎么清除干净_清除电脑“牛皮癣 ”,带你回归清爽体验~...
  4. pytorch笔记:torch.nn.functional.pad
  5. LeetCode题组:第13题-罗马数字转整数
  6. 详解惯性导航论文 RINS-W: Robust Inertial Navigation System on Wheels
  7. python汉诺塔递归算法_Python文摘:汉诺塔问题与递归算法
  8. Linux怎么对文件内容trim,Linux平台下SSD的TRIM指令的最佳使用方式(不区别对待NVMe)...
  9. Getmemory函数详解--内存操作的理解
  10. utilities(matlab)—— 合成数据(synthesis data)
  11. mysql分布式数据库_分布式数据库搭建详细教程
  12. 从零开始用 Windows C++ 桌面程序制作方舟同人游戏(五)
  13. 路由器不显示连接该WiFi的设备
  14. 首届STAC科创联合大会在成都召开 “开悟” AI平台将成为行业生态基建
  15. 攻防世界 web高级 leaking
  16. Idea导包自动去除Import xxx.*里的星号
  17. 小型IT咨询公司发展迅猛
  18. iOS快捷指令 | iPicGo,随时随地用手机上传图片到图床
  19. AS广播实现音乐播放器
  20. 分销软件为何如此火爆?

热门文章

  1. CentOS8 同步时间chrony ntpdate已无法使用
  2. 网络渗透测试(2)——使用nmap扫描微信服务器
  3. null或空值的判断处理-java
  4. 学会这5种Excel颜色搭配技巧,表格想做不好看都难
  5. Python 虚拟环境安装 ,避免影响生产环境。
  6. 最低服务器协议,的WebSocket服务器最低要求
  7. php验证规则表单,PHP Yii框架之表单验证规则大全
  8. 如何自学成为设计师_如何成为平面设计师?平面设计师平时做什么?教你做好平面设计...
  9. [警告] multi-字符 character constant [-Wmultichar] ----字符+符号输出错误
  10. 配置tomcat tomcat与nginx的整合