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

  

原文地址:https://www.cnblogs.com/zhangb8042/p/10557454.html