• golang异常处理


    一、使用defer+recover

    错误例子:

    [root@localhostgo_test]#cat t1.go 
    package main
    
    func main(){
         panic(1)
    }
    [root@localhostgo_test]#go run t1.go
    panic: 1
    
    goroutine 1 [running]:
    main.main()
    	/root/go_test/t1.go:4 +0x39
    exit status 2
    

      

    异常处理例子:

    [root@localhostgo_test]#cat error.go 
    package main
    import "fmt"
    
    func test(){
        
        defer func(){ //必须要先声明defer,否则不能捕获到panic异常
            err := recover()  
            if err != nil {
                fmt.Println("error!",err) // 这里的err其实就是panic传入的内容,1
            }
            fmt.Println("123")
        }()
        err()
    }
    
    func err(){
        fmt.Println("start...")
         panic(1)
        
    }
    
    func main(){
        test()
        fmt.Println("end...")
    
    }
    [root@localhostgo_test]#go run  error.go 
    start...
    error! 1
    123
    end...
    

      

    二、使用panic(不推荐使用)

    panic 内置函数 ,接收一个 interface{}类型的值(也就是任何值了)作为参数。可以接收 error 类
    型的变量,输出错误信息,并退出程序

    例子:

    package main
    import (
        "fmt"
        "time"
    )
     
    func main() {
        defer func() { //必须要先声明defer,否则不能捕获到panic异常
            fmt.Println("2")
            if err := recover(); err != nil {
                fmt.Println(err) //这里的err其实就是panic传入的内容,bug
            }
            fmt.Println("3")
        }()
        f()
    }
     
    func f() {
        for {
            fmt.Println("1")
            panic("bug") //panic遇到错误直接就退出了
            fmt.Println("4") //不会运行的
            time.Sleep(1 * time.Second)
        }
    }
    
    
    
    
    
    ###结果##
    1
    2
    bug
    3
    

      

     三、输出错误

    使用errors.Now进行错误输出

    例子:

    package main
    import (
        "fmt"
        "errors"
    )
    
    func main(){
        err := errors.New("error:未找到命令")
        if err != nil {
            fmt.Println(err)    
        }
        fmt.Println("111")
    }
    
    ###结果##
    error:未找到命令
    111
    

      

  • 相关阅读:
    media Queries实现一个响应式的菜单
    跨域资源共享(CORS)在ASP.NET Web API中是如何实现的?
    Media Formatters媒体格式化器
    Winform系列
    node-webkit入门
    WCF 自承载
    HttpClient的使用-爬虫学习1
    为什么程序员的工作效率跟他们的工资不成比例(转)
    大师们都是怎么撑场面的(转)
    马云关于企业发展的一些看法
  • 原文地址:https://www.cnblogs.com/zhangb8042/p/10557454.html
Copyright © 2020-2023  润新知