函数错误处理
1.通常函数是返回error值的,正常为nil。根据error值进行逻辑处理
package main
import (
"fmt"
"strconv"
)
func main() {
//通常函数是返回error值的,正常为nil。根据error值进行逻辑处理
parseBool, err := strconv.ParseBool("-1")
if err != nil {
fmt.Println(err) //strconv.ParseBool: parsing "-1": invalid syntax
} else {
fmt.Println(parseBool)
}
}
2.有时候可能会用到painc抛出错误,就需要recover去接收错误。如果不是导致系统无法运行的bug,一般不建议使用painc
package main
import (
"errors"
"fmt"
"runtime/debug"
)
func add() {
//抛出
panic(errors.New("我就是故意的"))
}
func main() {
//defer 最后执行 相当于代码写在add下面
defer func() {
//
err := recover()
if err != nil {
fmt.Println(err) //我就是故意的
debug.PrintStack() //打印堆栈信息
}
}()
add()
}
创建错误
1.errors.New(string) 创建错误
2.fmt.Errorf(p1,p2…) 创建错误 p1:格式 p2…:参数
3.自定义错误,有Error() string方法即可,可以通过switch + type 来匹配错误具体类型
package main
import (
"errors"
"fmt"
)
type MyError struct {
Message string
Age int
}
func (m MyError) Error() string {
return m.Message
}
func CreateErrorOne() error {
return errors.New("this is error")
}
func CreateErrorTwo() error {
return fmt.Errorf("这是第%d个error:%s", 2, "this is error")
}
func CreateMyError() error {
return MyError{Message: "this is error"}
}
func main() {
// errors.New(string) 创建错误
fmt.Println(CreateErrorOne()) // this is error
// fmt.Errorf(p1,p2...) 创建错误 p1:格式 p2...:参数
fmt.Println(CreateErrorTwo()) // 这是第2个error:this is error
//自定义错误,有Error() string方法即可,可以通过switch + type 来匹配错误具体类型
err := CreateMyError()
switch e := err.(type) {
case MyError:
fmt.Println("MyError:", e) // MyError: this is error
default:
fmt.Println(e)
}
}