Go 語言有沒有類似其他語言中的 try...catch 的函式可以用來處理錯誤訊息?答案是有,但是又有點不一樣,讓我們一起來看看。
錯誤處理
以前的 try...catch...finally 功能雖然好用,但是會導致整個結構變得很糟糕,維護又很不方便,而 Go 改良的這個問題。
package main
import "fmt"
func main() {
defer func() {
fmt.Println("first")
if err := recover(); err != nil {
fmt.Println(err)
}
fmt.Println("end")
}()
f()
}
func f() {
fmt.Println("test")
panic(1)
fmt.Println("test2")
}
首先要處理錯誤就必須要加上 defer 這樣才能正確的抓到,再這個例子我們藉由 panic 產生的個錯誤並且值為 1 ,這裡要注意的是 Go 的 panic 的錯誤真的是錯誤,程式一定會發生錯誤然後關閉,除非你有使用 recover 會回覆他的數值。
所以這裡的結果會是
test
first
1
end