美文网首页
Learn Golang in Days - Day 15-Go

Learn Golang in Days - Day 15-Go

作者: 笑吧小鸟 | 来源:发表于2019-02-08 14:59 被阅读11次

    Learn Golang in Days - Day 15-Go错误处理

    简介


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

    例子


    package main
    
    import "fmt"
    import "errors"
    
    func main() {
        //var f = 3.4 //正确
        var f float32 = -2.0
        var n, err = sqrt(f)
        if err != nil {
            fmt.Printf("error, %s\n", err)
            return
        }
        fmt.Printf("sqrt(%f) = %f\n", f, n)
    }
    
    func sqrt(f float32) (float32, error) {
        if f < 0 {
            fmt.Printf("err|| math,f < 0\n")
            return 0, errors.New("math,f < 0")
        }
    
        return f * f, nil
    }
    

    复杂例子


    • 定义结构体,实现Error接口
    package main
    
    import "fmt"
    
    //定义结构体
    type DivideError struct {
        dividee int
        divider int
    }
    
    //定义错误接口
    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() {
        fmt.Println("-----正常情况-------")
        //正常情况
        if result, errorMsg := Divide(100, 10); errorMsg == "" {
            fmt.Println("100/10 = ", result)
        }
    
        fmt.Println("-----异常情况-------")
        //当被除数为0的时候会返回错误信息
        if _, errorMsg := Divide(100, 0); errorMsg != "" {
            fmt.Println("errorMsg is: ", errorMsg)
        }
    }
    

    相关文章

      网友评论

          本文标题:Learn Golang in Days - Day 15-Go

          本文链接:https://www.haomeiwen.com/subject/roxosqtx.html