亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang中的panic怎么避免和處理程序中的異常

發布時間:2023-04-18 11:38:12 來源:億速云 閱讀:120 作者:iii 欄目:開發技術

這篇文章主要介紹了Golang中的panic怎么避免和處理程序中的異常的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Golang中的panic怎么避免和處理程序中的異常文章都會有所收獲,下面我們一起來看看吧。

1.panic是什么

panic() 是一個內建的函數

2.panic有什么用

作用:可以使用panic停止程序繼續運行,所以大多數都是在demo中使用,項目中盡量少使用,畢竟我們不能讓我們的項目突然退出了。

1.首先我們來看下面的這段代碼

package main
import "fmt"
func main() {
	fmt.Println("main開始")
	fmt.Println("main結束")
}

這是一段非常簡單的代碼,運行結果如下,我們可以看到整個程序正常的運行然后結束了。

yantao@hasee:~/go/src/panic_learn$ go run main.go 
main開始
main結束

2.我們試試添加panic函數

package main
import "fmt"
func main() {
   fmt.Println("main開始")
   panic("這是一個panic")	//第8行
   fmt.Println("main結束")
}

結果如下,我們看到當panic函數運行之后,后面的代碼就不在執行了,主程序main退出。

yantao@hasee:~/go/src/panic_learn$ go run main.go 
main開始
panic: 這是一個panic

goroutine 1 [running]:
main.main()
        /home/yantao/go/src/panic_learn/main.go:8 +0x65
exit status 2

3.如果panic出現在被調用者內呢

package main
import "fmt"
func main() {
	fmt.Println("main開始")
	fun1()
	panic("這是一個panic")
	fmt.Println("main結束")
}
func fun1()  {
	fmt.Println("fun1開始")
	panic("這是一個fun1的panic") //第17行
	fmt.Println("fun1結束")
}

我們發現程序在17行運行之后,fun1停止向下繼續運行了,而且調用者main也停止在調用fun1的地方了,并且退出了主程序main函數。

yantao@hasee:~/go/src/panic_learn$ go run main.go 
main開始
fun1開始
panic: 這是一個fun1的panic

goroutine 1 [running]:
main.fun1()
        /home/yantao/go/src/panic_learn/main.go:17 +0x65
main.main()
        /home/yantao/go/src/panic_learn/main.go:7 +0x57
exit status 2

內建函數panic停止當前Go程的正常執行。當函數fun1調用panic時,fun1的正常執行就會立刻停止。fun1返回給其調用者G。G如同fun1一樣行動,層層返回,直到主函數main。然后程序被終止,然后打印該恐慌的實參值(“這是一個fun1的panic”)。

下面的代碼也出現了panic

package main
import (
	"fmt"
)
func main() {
	fmt.Println("main開始")
	div()
	fmt.Println("main結束") //第17行
}
func div()  {
	var a = 5
	var b = 0
	res := a /b
	fmt.Println(res)
}

由于panic,程序停止了

yantao@hasee:~/go/src/panic_learn$ go run main.go 
main開始
panic: runtime error: integer divide by zero

goroutine 1 [running]:
main.div()
        /home/yantao/go/src/panic_learn/main.go:19 +0x11
main.main()
        /home/yantao/go/src/panic_learn/main.go:10 +0x5b
exit status 2

但是我們不想因為div的錯誤讓main停止,讓第12行也能繼續運行。這就引出了 defer…recover

3.defer…recover

defer…recover用來捕獲錯誤,defer 后面跟上匿名函數的調用,程序不會因為panic而中斷。

package main
import (
	"fmt"
)
func main() {
	fmt.Println("main開始")
	div()
	fmt.Println("main結束") //第12行
}
func div()  {
	defer func() {
		err := recover()
		if err != nil {
			//err確實存在
			fmt.Println("捕獲到錯誤啦,錯誤是:",err)
		}
	}()
	var a = 5
	var b = 0
	res := a /b
	fmt.Println(res)
}

我們看到main函數能夠繼續執行了,沒有被中斷。

yantao@hasee:~/go/src/panic_learn$ go run main.go 
main開始
捕獲到錯誤啦,錯誤是: runtime error: integer divide by zero
main結束

關于“Golang中的panic怎么避免和處理程序中的異常”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Golang中的panic怎么避免和處理程序中的異常”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延庆县| 大石桥市| 旌德县| 台北市| 磐安县| 罗源县| 仙居县| 沧源| 青岛市| 阳曲县| 酉阳| 封开县| 宁城县| 南雄市| 鲜城| 沛县| 孝昌县| 神木县| 浪卡子县| 万荣县| 浦北县| 台南市| 呼和浩特市| 凌云县| 泸溪县| 个旧市| 册亨县| 永昌县| 安宁市| 阳西县| 公主岭市| 长治县| 儋州市| 辽中县| 三都| 灵台县| 三明市| 邢台市| 河南省| 都安| 大丰市|