golang出现panic是什么原因
生活随笔
收集整理的這篇文章主要介紹了
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是什么原因的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XML是什么,有什么作用(SpringM
- 下一篇: python中none表示什么(Pyth