网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

Go语言-panic和recover使用实战

panic

正常的函数执行流程将立即终止,但函数中之前使用defer关键字延迟执行的语句将正常展开执行,之后该函数将返回到调用函数,并导致逐层向上执行panic()流程,直到所属的goroutine中所有正在执行的函数将被终止。错误信息将被报告,包括panic()的参数类型interface()我们可以看到,panic可以接收任意类型的数据
panic(404)
panic("network borken")
panic("Error("file not exists")

发展壮大离不开广大客户长期以来的信赖与支持,我们将始终秉承“诚信为本、服务至上”的服务理念,坚持“二合一”的优良服务模式,真诚服务每家企业,认真做好每个细节,不断完善自我,成就企业,实现共赢。行业涉及水电改造等,在网站建设公司全网营销推广、WAP手机网站、VI设计、软件开发等项目上具有丰富的设计经验。

recover

recover函数用于终止错误处理流程。recover应该在defer关键字的函数中执行以有效截取错误处理流程

实例1

package main

import (
    "fmt"
)

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("detail:", r)
        }
    }()

    fmt.Println("before painc")
    panic("error1")
    panic("error2")
    fmt.Println("after panic")
    return
}

运行结果

before painc
detail: error1

实例2

package main

import (
    "fmt"
)

func main() {
    fmt.Println("before painc")
    panic("error1")
    panic("error2")
    fmt.Println("after panic")
    return
}

运行结果

before painc
panic: error1

goroutine 1 [running]:
main.main()
    /home/kenmy/go/src/github.com/shadowsocks/shadowsocks-go/sample-config/panic.go:17 +0xdd

实例3

package main

import (
    "fmt"
)

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("detail:", r)
        }
    }()

    test()
    fmt.Println("end")
    return
}

func test() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("detail0:", r)
        }
    }()
    fmt.Println("before painc")
    panic("error1")
    panic("error2")
    fmt.Println("after panic")
}

运行结果

before painc
detail0: error1
end

实例4

package main

import (
    "fmt"
)

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("detail:", r)
        }
    }()

    test()
    fmt.Println("middle")
    panic("error3")
    fmt.Println("end")
    return
}

func test() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("detail0:", r)
        }
    }()
    fmt.Println("before painc")
    panic("error1")
    panic("error2")
    fmt.Println("after panic")
}

运行结果

before painc
detail0: error1
middle
detail: error3

实例5

package main

import (
    "fmt"
)

func main() {

    test()
    fmt.Println("middle")
    panic("error3")
    fmt.Println("end")
    return
}

func test() {
    fmt.Println("before painc")
    panic("error1")
    panic("error2")
    fmt.Println("after panic")
}

运行结果:

before painc
panic: error1

goroutine 1 [running]:
main.test()
    /home/kenmy/go/src/github.com/shadowsocks/shadowsocks-go/sample-config/panic.go:20 +0xdd
main.main()
    /home/kenmy/go/src/github.com/shadowsocks/shadowsocks-go/sample-config/panic.go:10 +0x26

网页标题:Go语言-panic和recover使用实战
网址分享:http://bjjierui.cn/article/pcceei.html

其他资讯