golang学习笔记——异常
自定义异常的两种方式
package main
import (
"errors"
"fmt"
)
func main() {
//使用fmt.Errorf
err1 := fmt.Errorf("%s", "this is normal error")
fmt.Println(err1)
//使用errors
err2 := errors.New("this is a not param error")
fmt.Println(err2)
}
-
应用
package main
import (
"errors"
"fmt"
)
func MyDiv(a, b int) (result int, err error) {
err = nil
if b == 0 {
err = errors.New("分母不能为0")
} else {
result = a / b
}
return
}
func main() {
result, err := MyDiv(6, 0)
if err == nil {
fmt.Println("result = ", result)
} else {
fmt.Println(err)
}
}
panic函数的使用
-
会终止程序的运行
package main
import (
"fmt"
)
func test1() {
fmt.Println("11111111111")
}
func test2() {
fmt.Println("222222222222")
panic("this is a panic error")
}
func test3() {
fmt.Println("333333333333")
}
func main() {
test1()
test2()
test3()
}
recover函数的使用(防止引起panic错误时导致程序终止)
-
只能放到defer函数中使用
package main
import (
"fmt"
)
func test1() {
fmt.Println("11111111111")
}
func test2(x int) {
defer func() {
if err := recover(); err != nil {
fmt.Println(err)
}
}()
var a [10]int
a[x] = 20
}
func test3() {
fmt.Println("333333333333")
}
func main() {
test1()
test2(20)
test3()
}