阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

简单介绍Go语言错误处理异常捕获+异常抛出

272次阅读
没有评论

共计 2152 个字符,预计需要花费 6 分钟才能阅读完成。

导读 这篇文章主要介绍了 Go 语言错误处理异常捕获和异常抛出,Go 语言的作者认为 java 等语言的错误处理底层实现较为复杂, 就实现了函数可以返回错误类型以及简单的异常捕获, 虽然简单但是也非常精妙, 大大的提高了运行效率, 下文需要的朋友可以参考一下

Go 语言追求简洁优雅,所以,Go 语言不支持传统的 try…catch…finally 这种处理。

Go 中引入的错误处理方式为:defer, panic, recover, 也仅仅是错处处理的模拟

Go 语言的作者认为 java 等语言的错误处理底层实现较为复杂, 就实现了函数可以返回错误类型以及

简单的异常捕获, 虽然简单但是也非常精妙, 大大的提高了运行效率。

一、error 变量可以做什么
1. 定义一个 error 变量

①直接 new 一个

err := errors.New(“ 我是错误处理语句 ”)

②实现 Error 接口

只要实现了 Error 接口就可以被 error 类型所接收, 打印的时候会直接打印实现接口时,方法返回的字符串。

官方接口如下:

type error interface {Error() string
}

代码如下:

// 定义一个结构体
type man struct {age int}
// 实现接口
func (a man) Error() string {
    str := "这是一个错误接口"
    return str
}
// 创建函数返回错误类型
func judgeAge() (int, error) {
    var a man
    return 0, a
}
// 主函数调用
func main() {_, e := judgeAge()
    if e!=nil{fmt.Println(e)
    }
}
2. 错误的处理

将如果错误变量不为空, 则将错误进行捕获打印, 这里直接打印到了控制台, 可以将错误打印到日志文件内, 为以后系统的维护做保障。

代码如下:

package main
 
import (
    "errors"
    "fmt"
)
 
func main() {err := errors.New("我是错误处理语句")
    if err != nil {fmt.Println(err)
    }else {fmt.Println("没有错误")
    }
    fmt.Println(123)
}
3. 做函数返回值

如果函数返回的错误类型值不为空, 则将其进行打印

代码如下:

package main
 
import (
    "errors"
    "fmt"
)
 
func test(num1,num2 int) error {
    if num2 == 0 {return errors.New("除数为零")
    }
    res := num1 / num2
    fmt.Println("计算结果为 =", res)
    return nil
 
}
func main() {err := test(11,0)
    if err!=nil{fmt.Println(err)
    }
}
4. 做函数参数

一般用作处理错误变量, 在需要进行错误检验的时候调用函数, 不用再进行判断了

代码如下:

func PrintError(err error){
    if err!=nil{fmt.Println(err)
    }
}
二、模拟异常的捕获与抛出
1.defer 简介

defer 后面定义的东西是在调用函数执行完的时候执行的代码,一般用于文件描述符、数据库对象的关闭(在之前讲管道的时候有介绍过)

defer 什么什么延时执行

代码如下:

func pDefer() {defer fmt.Println("hahaha")
    fmt.Println("hello")
}
func main() {pDefer()
}
/*
打印结果
    hello
    hahaha
*/
2. 使用 recover 模拟异常的捕获

代码如下:

package main
 
import ("fmt")
 
func test() {
    // 使用 defer + recover 来捕获和处理异常(返回错误变量)// 函数执行末尾执行这个匿名函数
     defer func() {err := recover() // recover() 内置函数,可以捕获到异常
         if err != nil {  // 说明捕获到错误
             fmt.Println(err)
         }
     }()
    num1 := 10
    num2 := 0
    res := num1 / num2
    fmt.Println("计算结果为 =", res)
 
}
func main() {test()
}
3. 使用 panic 主动抛出错误

异常的捕获, 使程序还能够正常的运行, 如果有致命错误就需要进行错误的抛出了, 也就是宕机,不到迫不得已千万不要使用这个函数, 有可能会造成大量数据的丢失

代码如下:

package main
 
import (
    "errors"
    "fmt"
)
 
func test() error {
    num1 := 10
    num2 := 0
    if num2 == 0 {return errors.New("除数为零")
    }
    res := num1 / num2
    fmt.Println("计算结果为 =", res)
    return nil
 
}
 
 
func main() {
    // 无论 err 是否为空, 都进行程序的终止
     panic(test())// 内置函数 2, 参数使一个 interface 接口
}

运行结果:

简单介绍 Go 语言错误处理异常捕获 + 异常抛出

总结:

Go 语言虽然没有一个较为成熟的异常捕获机制, 但是其精简的错误处理仍旧能够满足其需求, 减少错误的处理大大的加快了我们的开发效率, 代码的运行效率。

到此这篇关于 Go 语言错误处理异常捕获 + 异常抛出的文章就介绍到这了

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计2152字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7968732
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新 SSL 证书系统、申请 godaddy 的 APIKEY 公司之前花钱购买的 ssl 证书快...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...