zoukankan      html  css  js  c++  java
  • GO_10:GO语言基础之error

    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 main
    
    import "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: %d
            divider: 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: 100
            divider: 0
  • 相关阅读:
    APP测试中 iOS 和 Android有哪些区别呢
    软件测试的标准工作流程
    selenium在元素定位的时候,明明定位到元素却始终不可见
    接口测试要点
    测试用例的组成部分
    APP测试的全面性
    安卓出现ARN的原因
    测试的多个方面
    α测试和β测试
    接口自动化测试用例设计方法
  • 原文地址:https://www.cnblogs.com/liang1101/p/6623548.html
Copyright © 2011-2022 走看看