package main import ( "fmt" ) func test(a, b int) (res int, err error) { err = nil if b == 0 { fmt.Println("err=", err) // err= } else { res = a / b } return } func main() { res, err := test(10, 0) if err != nil { fmt.Println("err = ", err) } else { fmt.Println(res) // 0 } }
panic函数: 当程序遇到panic函数会自动终止;
package main import "fmt" func main() { fmt.Println("hello...") fmt.Println("hello...") fmt.Println("hello...") panic("hello") fmt.Println("hello...") fmt.Println("hello...") // hello... // hello... // hello... // panic: hello // goroutine 1 [running]: // main.main() // /Users/chengfei/Documents/学习/02_Golang学习/09_异常处理/02_panic函数.go:9 +0x145 // exit status 2 }
func main() { defer fmt.Println("你好...") defer fmt.Println("世界...") defer fmt.Println("hello...") fmt.Println("world...") // world... // hello... // 世界... // 你好... }
即使函数或者某个延迟调用发生了错误, 这些调用依旧会被执行
func test(x int) int { v := 100 / x return v } func main() { defer fmt.Println("你好...") defer fmt.Println("世界...") defer test(0) defer fmt.Println("hello...") defer fmt.Println("world...") // world... // hello... // 世界... // 你好... // panic: runtime error: integer divide by zero }
func main() { a, b := 10, 20 defer func() { fmt.Println("匿名函数: ", a, b) }() a = 100 b = 200 println("main函数", a, b) } main函数 100 200 匿名函数: 100 200
func main() { a, b := 10, 20 defer func(a, b int) { fmt.Println("匿名函数: ", a, b) }(a, b) a = 100 b = 200 println("main函数", a, b) } // main函数 100 200 // 匿名函数: 10 20
package main import "fmt" func testA() { fmt.Println("testA...") } func testB(x int) { // 设置recover() // 在defer调用的函数中使用recover() defer func() { // 防止程序崩溃 // recover() if err := recover(); err != nil { fmt.Println(err) } }() // 匿名函数调用 var a [3]int a[x] = 999 fmt.Println(a) } func testC() { fmt.Println("testC...") } func main() { testA() testB(3) // err: 下标越界 testC() // testA... // runtime error: index out of range [3] with length 3 // testC... }