Golang 错误处理

基本说明

1)Go语言煮酒简洁优雅,所以,Go语言不支持传统的 try catch finally 这种处理。

2)Go中引入的处理方式为:defer,panic,recover。

3)这几个异常的使用场景可以这么简单描述:Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。

复制代码
package main

import (
    "fmt"
)

//这种情况下抛出异常后程序依然继续执行
func test() {
    //使用defer+recover 来捕获和处理异常
    defer func() {
        err := recover() //recover()内置函数,可以捕获到异常
        if err != nil {  // 说明捕获到错误
            fmt.Println("err = ", err)
            //这里就可以将错误信息发送给管理员或记录在系统日志等操作
            fmt.Println("发送邮件给admin@sohu.com")
        }
    }()

    num1 := 10
    num2 := 0
    res := num1 / num2
    fmt.Println("res=", res)
}

func main() {

    //测试
    test()
    fmt.Println("main() 下面的代码...")
}
复制代码

 

 

 自定义错误

Go程序中,也支持自定义错误,使用 errors.Nowpanic 内置函数。

1)errors.New("错误说明"),会返回一个error类型的值,表示一个错误

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

复制代码
package main

import (
    "errors"
    "fmt"
)

//这种操作抛出异常后不会继续执行后续代码

//函数去读取配置文件的信息
//如果文件名传入不正确,我们就返回一个自定义的错误
func readConf(name string) (err error) {
    if name == "config.ini" {
        //读取...
        return nil
    } else {
        //返回一个自定义错误
        return errors.New("读取文件错误...")
    }
}
func test02() {
    err := readConf("config1.ini")
    if err != nil {
        //如果读取文件发送错误,就输出这个错误,并终止程序
        panic(err)
    }
    fmt.Println("test02()继续执行....")
}

func main() {

    //测试
    test02()
    fmt.Println("main() 下面的代码...")
}
复制代码

 

posted @   创客未来  阅读(216)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示