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

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 main

import (
    "fmt"
)

// 定义一个 DivideError 结构
type DivideError struct {
    dividee int
    divider int
}

// 实现 `error` 接口
func (de *DivideError) Error() string {
    strFormat := `
    Cannot proceed, the divider is zero.
    dividee: %d
    divider: 0
`
    return fmt.Sprintf(strFormat, de.dividee)
}

// 定义 `int` 类型除法运算的函数
func Divide(varDividee int, varDivider int) (result int, errorMsg string) {
    if varDivider == 0 {
            dData := DivideError{
                    dividee: varDividee,
                    divider: varDivider,
            }
            errorMsg = dData.Error()
            return
    } else {
            return varDividee / varDivider, ""
    }

}

func main() {

// 正常情况
    if result, errorMsg := Divide(100, 10); errorMsg == "" {
            fmt.Println("100/10 = ", result)
    }
    // 当被除数为零的时候会返回错误信息
    if _, errorMsg := Divide(100, 0); errorMsg != "" {
            fmt.Println("errorMsg is: ", errorMsg)
    }

}

执行以上程序,输出结果为:

100/10 =  10
errorMsg is:
    Cannot proceed, the divider is zero.
    dividee: 100
    divider: 0

最新文章

  1. Myeclipse中创建Maven工程的时候没有 webapp-javaee6
  2. HttpCache ETag与Last-Modified与Expires
  3. 【uTenux实验】时间管理(系统时间/周期性处理/警报处理)
  4. 微信app的分享功能
  5. 个人的IDE制作(vim)——适用于C++/C
  6. WINDOWS程序设计对话框加载显示bmp图像及刷新
  7. swift 获取文件的Md5值
  8. idea+jsp+jstl c标签页面异常
  9. Spring Boot + Jersey发生FileNotFoundException (No such file or directory)
  10. ES6.3.2 index操作源码流程
  11. Vue API(directives) 自定义指令
  12. MySQL源码包编译安装
  13. 用php实现表格
  14. JS访问或设置cookie的方法+跨域调用方法
  15. NAT资料
  16. bzoj1494 生成树计数 (dp+矩阵快速幂)
  17. day2_Jmeter压测
  18. Java高级特性 第3节 java中常用的实用类(2)
  19. cli 开发记录
  20. vijos1098 经典LIS变形

热门文章

  1. DSP---TI CCSv5.5.x-Windows安装
  2. js的一些基础
  3. Linux Centos7文件系统
  4. spring boot配置druid数据连接池
  5. JQuery/JS插件 jsTree加载树,预先加载,初始化时加载前三级节点,当展开第三级节点时 就加载该节点下的所有子节点
  6. Go_file操作
  7. 【C语言】用指针描述数组,实现冒泡法排序
  8. VMware下Linux虚拟机访问本地Win共享文件夹
  9. ClickOnce部署,修改deploymentProvider
  10. javascipt——jQuery