zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    jvm类加载
    SpringMVC拦截器踩坑日记
    ConcurrentHashMap源码
    HashMap源码
    Linux搭建数据质量监控 Griffin
    那些说代码管理不方便的,我估计是你不会用git(Git源码管理)
    VS2019 开发AngularJS(TypeScript)代码缩进处理
    Arraylist和Map哪个性能更好
    dynamics crm 团队及团队模板
    无法加载文件或程序集 PublicKeyToken=null'或其依赖之一,需要强名称的程序集
  • 原文地址:https://www.cnblogs.com/zhangb8042/p/10557454.html
Copyright © 2011-2022 走看看