1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package main import "fmt" func main() { tryCatch(func(){ panic("exception") }, func(e interface{}){ fmt.Println(e) }) } func tryCatch(fun func(), handler func(interface{})) { defer func() { if err := recover(); err != nil { handler(err) } }() fun() } |
上面这样写的try,基本实现了try..catch.. 的功能,但是,如果要在catch中提前return,就不那么方便了,虽然也能做,且看下面这个版本, 我们不妨实现try、try..catch.. 两个函数,需要立即返回的时候,使用try更方便些:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
package main import ( "fmt" ) func main() { tryCatch(func(){ panic("exception") }, func(e interface{}){ fmt.Println(e) }) err := try(func(){ panic("exception") }) if err != nil { // use try for return quickly fmt.Println(err) return } } func tryCatch(fun func(), handler func(interface{})) { defer func() { if err := recover(); err != nil { handler(err) } }() fun() } func try(fun func()) (err interface{}){ defer func() { err = recover() }() fun() return } |