golang异常处理

一、使用defer+recover

错误例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
[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

  

异常处理例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[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 类
型的变量,输出错误信息,并退出程序

 

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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进行错误输出

 

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main
import (
    "fmt"
    "errors"
)
 
func main(){
    err := errors.New("error:未找到命令")
    if err != nil {
        fmt.Println(err)   
    }
    fmt.Println("111")
}
 
###结果##
error:未找到命令
111

  

 

posted @   巽逸  阅读(252)  评论(0编辑  收藏  举报
编辑推荐:
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 基于DeepSeek R1 满血版大模型的个人知识库,回答都源自对你专属文件的深度学习。
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· Tinyfox 简易教程-1:Hello World!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
点击右上角即可分享
微信分享提示