Go 的自定义错误 | 学习笔记

简介: 快速学习 Go 的自定义错误

开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map: Go 的自定义错误】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/625/detail/9624


Go 的自定义错误

前言

如果发生一个错误过后,在 go 程序中希望这个错误的信息由自己来定义,希望发生错误后这个程序放弃执行,因为可能有些错误是致命的,比如读取一个配置文件,如果这个配置文件都没有读取到,那下面的代码也没有意义。可以用自定义错误,完成以下的处理。

 

一、自定义错误的介绍

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

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

打开 GO 语言标准库文档找到 error,error 会返回一个错误类型。

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

interface 空接口类型任何的值都可以传过去,也可以接收 error 类型的变量,panic 函数可以接收错误类型的变量,并且打印出来,而且退出程序。

3、代码案例

package main

import(

"fmt"

"time"

"errors"

)

func test() {

//使用 defer + recover 来捕获和处理异常

defer func() {

err := recover() l/ recover()内置函数,可以捕获到异常

if err != nil {  //说明捕获到错误

fmt.Println( "err=", err)

}

}

num1 := 10

num2 := 0

res ;= num1 / num2

fmt.Println( "res=", res)

}

//函数去读取以配置文件 init.conf 的信息

//如果文件名传入不正确,我们就返回一个自定义的错误

func readconf(name string)  (err error) {

if name = "config.ini" {

//读取...

return nil

}else {

//返回一个自定义错误

return errors. New("读取文件错误..")

}

}

func test02(){

err := readconf( "config.ini")

if err != nil  {

//如果读取文件发送错误,就输出这个错误,并终止程序

panic(err)

}

fmt.Println( "test02()继续执行....")

}      

func main() {

//测试

//test()

//fmt.Println( "main()下面的代码...")

//time.Sleep(time.Second)  //休眠

//测试自定义错误的使用

test02()

fmt.Println( "main()下面的代码...")

}

4、运行结果:

test02() 继续执行....

main() 下面的代码...

5、代码分析:

模拟一个错误,函数去读取配置文件 init.conf 的信息,如果文件名传入不正确,就返回一个自定义的错误。func readconf(name string)  (err error) ,在返回列表里面可以给一个变量名称。判断 name==“confg.init” ,读取,retrun nil 返回没有错误。如果文件名不对,返回一个自定义错误,用New创建一个自定义错误。 error 是包,需要引入 errors 包。

测试再创一个函数 test02,用 err 来接收,去调用 readConf, 如果读取文件发送错误,就输出这个错误,并终止程序。用到 panic 内置函数,会打出错误信息并终止程序。测试自定义错误的使用,直接调用 test02 ,直接输出。在代码中传输的文件名是正确,所以自定义错误不会抛出。结果输出 test02() 继续执行 ....main() 下面的代码...如果传的文件名不正确,会通过 readConf 返回自定义的错误,返回之后拿到错误,panic 会读取文件发送的错误,并输出这个错误,终止程序。结果输出 panic: 读取文件错误..,后面的代码全部不执行。这就是自定义错误的用法,输出这个错误,并终止程序。

6、结果分析:

在 main 函数中调用了 test02 ,传入的文件名不对,将会返回一个自定义的错误,panic 会向文件名发送错误,输出这个错误,并终止程序,最后输出读取文件错误。

相关文章
|
7月前
|
监控 安全 Java
Go语言学习笔记(一)
Go语言学习笔记(一)
125 1
|
Go 区块链
go 编译 自定义 图标 ico文件
go 编译 自定义 图标 ico文件
90 0
|
SQL 关系型数据库 Go
Go语言微服务框架 - 12.ORM层的自动抽象与自定义方法的扩展
随着接口参数校验功能的完善,我们能快速定位到接口层面的参数问题;而应用服务的分层代码,也可以通过log的trace-id发现常见的业务逻辑问题。 但在最底层与数据库的操作,也就是对GORM的使用,经常会因为我们不了解ORM的一些细节,导致对数据的CRUD失败,或者没有达到预期效果。这时,我们希望能在ORM这一层也有一个通用的解决方案,来加速问题的排查。
86 0
|
Go 开发者
Go语言自定义包:构建你的编程工具库
Go语言自定义包:构建你的编程工具库
121 0
Go语言的条件控制语句及循环语句的学习笔记
本文是Go语言的条件控制语句和循环语句的学习笔记,涵盖了if语句、if-else语句、if嵌套语句、switch语句、select语句以及for循环和相关循环控制语句的使用方法。
Go语言的条件控制语句及循环语句的学习笔记
|
3月前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
3月前
|
人工智能 算法 搜索推荐
Go学习笔记-代码调
近年来,人工智能技术飞速发展,Cody作为由Sourcegraph开发的一款AI驱动编码助手,应运而生。它不仅提供代码预测与补全,还能深度理解代码上下文,为开发者提供准确建议,提升编码效率和质量。Cody能识别潜在错误并提出修复建议,缩短调试时间,同时进行智能代码审查,帮助优化代码结构和风格。未来,随着AI技术进步,Cody将不断学习优化,成为开发者不可或缺的伙伴,推动编程领域的创新与发展。
36 0
|
5月前
|
存储 Go 索引
在go语言中自定义泛型的变长参数
【7月更文挑战第8天】在Go语言中,由于官方1.18以前的版本不支持泛型,可以通过空接口和反射模拟泛型。泛型适用于通用数据结构和函数,虽牺牲了一些性能,但提高了代码复用和类型安全性。
69 1
|
6月前
|
Go 数据库
Go语言之GORM框架(四)——预加载,关联标签与多态关联,自定义数据类型与事务(完结篇)
Go语言之GORM框架(四)——预加载,关联标签与多态关联,自定义数据类型与事务(完结篇)
go import自定义包
go import自定义包
51 0