美文网首页深入浅出golangGolang 入门资料+笔记程序员
31. 错误 通常函数会返回一个error值来判断是否出错

31. 错误 通常函数会返回一个error值来判断是否出错

作者: 厚土火焱 | 来源:发表于2017-08-19 16:35 被阅读72次

go程序使用 error 值来表示错误判断。通常函数会返回一个 error 值,我们用来判断程序运行是否出错。所以在 go 程序中,你总是能见到很多 if err != nil 语句。
与 fmt.Stringer 类似,error 类型是一个内建接口。

type error interface {
    Error() string
}

函数一般判断是否需要错误处理的方式。

i, err := strcov.Atoi("42")
    if err != nil {

    }

我们可以自定义 error 发生时,显示的输出格式。

package main

import (
    "fmt"
    "time"
)
type MyError struct {
    When time.Time
    What string
}

func (e *MyError) Error() string {
    return fmt.Sprintf("at %v --> %s", e.When, e.What)
}
func run() error {
    return &MyError{
        time.Now(),
        "it didn't work",
    }
}
func main() {
    if err := run(); err != nil {
        fmt.Println(err)
    }
}

运行结果

at 2017-08-19 14:14:39.9021933 +0800 CST --> it didn't work

可知,error 为 nil 时表示成功,error 为非 nil 时,表示有错误。
前面有一个 Sqrt 函数的练习,这里修改一下,可以返回 error 值。这样当 Sqrt 接收到一个不支持的负数时,就返回非 nil 的错误值。
代码中需要创建一个新类型

type ErrNegativeSqrt float64

为此类型实现一个 Error() 方法

func (e ErrNegativeSqrt) Error() string

当 error 发生时,返回 cannot Sqrt negative number: -2
代码示例

package main

import (
    "fmt"
)

type ErrNegativeSqrt float64

func (e ErrNegativeSqrt) Error() string {
    return fmt.Sprintf("cannot Sqrt negative number:%v\n", float64(e))
}

func Sqrt(x float64) (float64, error) {
    if x >= 0 {
        return 0, nil
    }else{
        return x, ErrNegativeSqrt(x)
    }

}

func main() {
    fmt.Println(Sqrt(2))
    fmt.Println(Sqrt(-2))
}

运行结果

0 <nil>
-2 cannot Sqrt negative number:-2

相关文章

  • 31. 错误 通常函数会返回一个error值来判断是否出错

    go程序使用 error 值来表示错误判断。通常函数会返回一个 error 值,我们用来判断程序运行是否出错。所以...

  • Go error

    error Go 使用 error 类型来表示函数执行过程中遇到的错误,如果返回的 error 值为 nil,则表...

  • golang 错误处理

    Go 语言使用 error 类型来返回函数执行过程中遇到的错误,如果返回的 error 值为 nil,则表示没有错...

  • Golang学习 - errors 包

    Go 语言使用 error 类型来返回函数执行过程中遇到的错误,如果返回的 error 值为 nil,则表示未遇到...

  • 文件出错处理

    检查文件是否出错 使用到的函数int ferror(FILE * pf)测试文件是否出错返回值: 出错, 返回非0...

  • Swift12 - 错误处理、类型转换、嵌套类型

    错误处理 错误用遵循 Error 协议的类型的值来表示 在调用一个能抛出错误的函数、方法或者构造器之前,加上 tr...

  • Go Error处理

    错误处理 Go语言的错误设计是通过返回值的方式来让调用者对错误进行处理,通常我们的处理是对error类型的返回值进...

  • 跳出函数的外层看函数

    今天写了一个函数,只有一个正常返回值,其余抛异常,而外层又拿函数的返回值做flag来判断是否需要重入,该函数正常执...

  • Java为什么要引入异常处理机制

    如果没有异常处理,函数调用过程就只能通过检查函数返回值错误码方式来判断函数调用是否正确执行,这会扰乱正常代码流程,...

  • Es6 async 函数

    1、 async函数返回一个 Promise 对象。 2、async函数内部抛出错误,会导致返回的 Promise...

网友评论

    本文标题:31. 错误 通常函数会返回一个error值来判断是否出错

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