go中的错误处理

目前go中的错误处理机制比较简单。往往是通过一个error实例来传达错误信息。go内置一个error接口来默认处理错误:

type error interface {
    Error() string
}
...
func main()[
    i,error := someType.Method("110")
    if error != nil {
        //处理
    }
    fmt.Printf("the value is %v\n",i)
}

函数调用后,判断error是否为nil。error为nil表示函数顺利执行,否则处理错误。

我们也可以自定义一个错误接口,按需返回期望的错误信息:

//自定义一个错误类型,并实现Error方法
type CustomerError struct{
    When time.time
    What string
}
func (e *CustomerError) Error() string{
    return fmt.Sprintf("at %v, %s", e.When, e.What)
}
...
//某函数内部
if value<=0 {
    return &CustomerError{
        time.Now(),
        "value must larger than 0",
    }
}
...
//执行栈中
i,error := somefunc(value)
if err != nil {
   fmt.Println(err)
}
//输出:
at 2018-08-30 16:29:30.79250559 +0800 CST m=+0.000562311, value must larger than 0

猜你喜欢

转载自blog.csdn.net/weixin_36094484/article/details/82223283