目前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