在 Golang 中,错误处理机制一般是函数返回时使用的,是对外的接口,而异常处理机制 panic-recover 一般用在函数内部。
error 类型实际上是抽象了 Error() 方法的 error 接口,Golang 使用该接口进行标准的错误处理。
type error interface {
Error() string
}
1. 通常的用法:
error在函数返回值的一部分,一般是放在最后。用来判断结果,配合Println调试程序。比如下面的例子。
package main
import "fmt"
func FuncErr(val1 int, val2 string) (res string, err error) {
// ...
return "something..", err
}
func main() {
if n, err := FuncErr(100, "Good"); err != nil {
// 错误处理
fmt.Println(err)
}else {
fmt.Println(n)
}
}
2. 也可以自定义一个错误,参考具体代码如下:
package main
import "fmt"
type myError struct {
val1 int
err string
}
func (this myError) Error() string {
return fmt.Sprintf("Number should bigger than 0\n")
}
func positiveNum (num int) (bool, error) {
if (num > 0) {
return true, nil
} else {
return false, myError{val1: num}
}
}
func main() {
if result, err := positiveNum(-1); err !=nil {
fmt.Println("Error: ", err)
}else{
fmt.Println("Number: ", result)
}
}
# 输出:
Error: Number should bigger than 0
如果positiveNum函数的入口参数是个正数,结果显而易见。