如果在函式中執行 panic,那麼函式的流程就會中斷,若 A 函式呼叫了 B 函式,而 B 函式中呼叫了 panic,那麼 B 函式會從呼叫了 panic 的地方中斷,而 A 函式也會從呼叫了 B 函式的地方中斷,若有更深層的呼叫鏈,panic 的效應也會一路往回傳播。
很明顯的,panic 就是為了設立檢查點而生
我們可以設定遇到錯誤就執行 panic 讓程式去做出該有的反應
也可以想像我們用了 panic 就是暫停了程式
這邊有個簡單的例子
package main
import (
"fmt"
)
func main() {
fmt.Println(123)
panic("Panic!")
fmt.Println(456)
}
執行結果
123
Panic!
由於我們在印完 "123" 過後就用了 panic , "456" 並不會被列印
不過這個函式會產生執行期(run-time)的錯誤,這時候就會讓 recover 派上用場
明天會談談 recover 這個常常和 panic 搭載一起用的函式