如題,這個問題是The Go Programming Language 裏面的練習5.19,挺有意思的一道題目。
中文版能夠參考 https://shifei.me/gopl-zh/ch5...html
實現代碼以下:函數
package main import "fmt" func main() { a := returnN() fmt.Println(a) } func returnN() (result int) { defer func() { if p := recover(); p != nil { result = p.(int) } }() panic(3) }
運行後,屏幕會打印出3。緣由我認爲是如下兩點:code
致使panic異常的函數不會繼續運行,但能正常返回。htm
被延遲執行的匿名函數能夠修改函數返回給調用者的返回值。get
因此在panic 函數執行後,函數準備返回result 這個變量,以後執行defer 的func,在這個func 裏改變了result 的值,從而實現了問題的要求。import