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

栏目: Go · 发布时间: 7年前

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错误处理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Effective C++中文版

Effective C++中文版

[美] Scott Meyers / 侯捷 / 华中科技大学出版社 / 2001-9 / 49.80元

Effective C++是世界顶级C++大师Scott Meyers的成名之作,初版于1991年。在国际上,这本书所引起的反响之大,波及整个计算机技术出版领域,余音至今未绝。几乎在所有C++书籍的推荐名单上,这部专著都会位于前三名。作者高超的技术把握力,独特的视角、诙谐轻松的写作风格、独具匠心的内容组织,都受到极大的推崇和仿效。 书中的50条准则,每一条都扼要说明了一个可让你写出更好的C+......一起来看看 《Effective C++中文版》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码