文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Go中的错误和异常处理最佳实践方法

2024-04-02 19:55

关注

错误

认识错误

在Go中,错误是一种表示程序错误状态。包含了在程序在运行时、编译时的状态信息。一般我们在编写Go代码中,都会碰到如下的处理方式。

file, err := os.Create("test.txt")
fmt.Println(file)
if err != nil {
fmt.Println(err)
return
}

我们使用os库创建一个名为test.txt的文件,该方法返回一个文件指针或err的错误信息。

err表示文件创建失败时的错误信息。当存储错误时,我们则对程序做错误处理;不存在错误时,则正常执行其他的逻辑代码。

自定义错误

在Go中是允许我们自定义错误信息的。自定义错误信息需要利用自带的error报中的New()函数。

如下示例代码:

package main

import (
"errors"
"fmt"
)
func printError() (a int, err error) {
err = errors.New("打印错误信息")
a = 1
return
}
func main() {
i, err := printError()
fmt.Println("i value is", i)
if err != nil {
fmt.Println(err)
return
}
}

具体的打印信息:​​i value is 1 打印错误信息​​。

实现原理

在使用​​errors.New()​​函数时,该包中声明了一个结构体​​errorString​​并且实现了error接口体中的方法​​Error()​​。

// errors包
package errors
func New(text string) error {
return &errorString{text}
}
type errorString struct {
s string
}
func (e *errorString) Error() string {
return e.s
}
// error接口
type error interface {
Error() string
}

异常

认识异常

异常是程序在​​编译时​​或者​​运行时​​发生的异常信息。如果不对异常做处理,可能导致程序终止程序或者抛出异常信息,导致程序无法正常运行。不管是在程序编译或者运行时,都需要对异常进行严格处理。

如下代码,程序在编译时就会触发异常,导致无法进行正常编译:

package main

import "fmt"

func main() {
panic("print panic")
fmt.Println("end")
}

打印结果:

╰─ go run demo6.go
panic: print panic

goroutine 1 [running]:
main.main()
/usr/local/var/www/go/golang_code/src/syntax/err/demo6.go:20 +0x39
exit status 2

处理异常

当程序在运行过程中发生异常,会终止程序的正常运行。需要严格处理异常信息。Go中可以使用recover()将程序从panic中获取异常信息,并获取程序的执行权。

异常处理原则

异常处理实践

下面的示例代码,在被调用函数printPanic()中触发一个panic(),在main()函数中使用defer中接收panic()信息,并对panic()做异常处理。

package main
import "fmt"
func printPanic() {
panic("panic exception")
}

func main() {
defer func() {
err := recover()
if err != nil {
fmt.Println("panic is", err)
}
}()

printPanic()

fmt.Println("end")
}

打印结果:

╰─ go run demo5.go
i value is 1
打印错误信息

到此这篇关于Go中的错误和异常处理最佳实践方法的文章就介绍到这了,更多相关Go异常处理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯