• 技术文章 >后端开发 >Golang

    golang出现panic是什么原因

    (*-*)浩(*-*)浩2019-12-28 09:24:57原创1738

    在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是什么原因的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:golang
    上一篇:golang的不足之处是什么? 下一篇:golang单元测试怎么写
    PHP编程就业班

    相关文章推荐

    • golang 如何debug• golang 如何安装包• golang 如何处理大数据• golang 如何结束一个协程

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网