简介
Go语言中抓取异常,当你觉得代码某部分很难避免或者可能出现异常的时候, 像C++、Java等语言都有Try...Catch, 于是乎你想使用,怎么办呢...
Go异常机制
下面这一篇文章已经介绍的很清楚了
/study/wiki/type/Z29fc3R1ZHlfaW5mbw==/id/59b54210a55d5080678b456c
Try...Catch...实现
/* 抓取到的错误,catch出来 */
func catchError(catch func(errString string)) {
if r := recover(); r != nil {
catch((r))
}
}
/* Try...Catch 主块代码 */
func TryCatch(Try func(), Catch func(errString string)) bool {
var hasException = true
/* 像个沙箱,放进去, 邪恶的试验 */
func() {
defer catchError(Catch)
Try()
hasException = false
}()
return hasException
}
实践
/* 可能异常的代码 */
func Crash() {
var dat []string
dat[0] = "ni hao wo ye hao"
}
/* 异常之后的处理代码 */
func IfCrashed(catchString string) {
("OMG, ", catchString)
}
func main() {
/* 开始试验 */
var crashed = TryCatch(Crash, IfCrashed)
("Crashed: ", crashed)
}
结果
OMG, runtime error: index out of range [0] with length 0
Crashed: true
Note
除了 try...catch 之外 还有 try...catch..final, 如果有需要,可以自己加, 即写一个TryCatchFinal(Try func(), Catch(err string), Final()) bool 这样子的