Golang : Try...Catch...

时间:2025-03-04 07:40:08

简介

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 这样子的