日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

golang出现panic是什么原因

發布時間:2023/12/15 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 golang出现panic是什么原因 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在go中,當程序出現異常時,會發生panic。當發生panic后,需要使用recover捕獲,如果沒有捕獲,則程序退出。

panic用來表示異常,即不該出現的錯誤或者意料不到的錯誤。 (推薦學習:go)

package main 
import "fmt" 
import "runtime/debug" 
 
func fun() {
    fmt.Println("fun begin")
 
	defer func() {
			//捕獲panic
		if err := recover(); err != nil {
			debug.PrintStack()
			//獲取堆棧信息的字符串
			fmt.Println("xxx", string(debug.Stack()))
		}
	}()
 
	var p *int
	//產生異常
	*p = 0
	fmt.Println("fun end")
 	//這里不執行
	for {}
}
 
func main() {
	fmt.Println("main begin")
	fun()
	//因為panic被recover捕獲,所以下面繼續執行
	fmt.Println("main end")
 
	for {}
}

登錄后復制

輸出結果:

main begin
fun begin
goroutine 1 [running]:
runtime/debug.Stack(0xc000088060, 0xc00009a000, 0xa)
        /usr/local/Cellar/go/1.11.1/libexec/src/runtime/debug/stack.go:24 +0xa7
runtime/debug.PrintStack()
        /usr/local/Cellar/go/1.11.1/libexec/src/runtime/debug/stack.go:16 +0x22
main.fun.func1()
        /Users/xxx/test/a.go:10 +0x46
panic(0x10a9760, 0x115d520)
        /usr/local/Cellar/go/1.11.1/libexec/src/runtime/panic.go:513 +0x1b9
main.fun()
        /Users/xxx/test/a.go:16 +0x7f
main.main()
        /Users/xxx/test/a.go:24 +0x66
xxx goroutine 1 [running]:
runtime/debug.Stack(0xc00007ada8, 0x10a9760, 0x115d520)
        /usr/local/Cellar/go/1.11.1/libexec/src/runtime/debug/stack.go:24 +0xa7
main.fun.func1()
        /Users/xxx/test/a.go:11 +0x4b
panic(0x10a9760, 0x115d520)
        /usr/local/Cellar/go/1.11.1/libexec/src/runtime/panic.go:513 +0x1b9
main.fun()
        /Users/xxx/test/a.go:16 +0x7f
main.main()
        /Users/xxx/test/a.go:24 +0x66
main end

登錄后復制

以上就是golang出現panic是什么原因的詳細內容,更多請關注風君子博客其它相關文章!

總結

以上是生活随笔為你收集整理的golang出现panic是什么原因的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。