Go语言有内置的错误接口,可以通过实现接口的方式定义异常,和其他语言的try···catch语法不一样。我现在看着特别别扭。
内置的error接口如下:
type error interface {
Error() string
}
1、使用实现Error接口方式
样例代码如下
package main import "fmt" type CustomError struct { code int msg string } func (error *CustomError) Error() string { return fmt.Sprintf("Error -> code=%d,msg=%s\n", error.code, error.msg) } func test_intf(a, b int) (result int, errorMsg string) { if a > b { return a, "" } else { _error := CustomError{1, "a <= b"} return 0, _error.Error() } } func main() { result, msg := test_intf(10, 20) if result == 0 { fmt.Println(msg) } else { fmt.Printf("result = %d\n", result) } }
执行结果
Error -> code=1,msg=a <= b
注意
1、构建自定义的异常结构体CustomError,实现Error方法。
2、使用errors的方法构建异常对象
样例代码如下
package main import ( "errors" "fmt" ) var errCust = errors.New("自定义异常") func test_cust(a, b int) (int, error) { if b == 0 { return 0, errCust } return a / b, nil } func main() { if res, err := test_cust(10, 0); err != nil { fmt.Printf("test_cust error is %v\n", err) } else { fmt.Printf("test_cust is %d\n", res) } }
执行结果
test_cust error is 自定义异常
小结
感觉还是漏了一些东西,我后面要好好想想学习路线问题,需要停下来反思一下。