背事故?分享 6 种常见的 Go 致命错误场景

本文探讨了 Go 语言中的三种错误类型:error、panic 和 fatal error,特别是 fatal error,它是 Go 底层在特定错误场景下触发的不可恢复错误。文章列举了六个可能导致程序崩溃的致命场景,包括并发读写 map、堆栈内存耗尽、nil 函数作为 goroutine 启动、goroutines 死锁、线程限制耗尽和超出可用内存。通过了解这些场景,开发者可以更好地避免和处理 Go 程序中的致命错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有一次事故现场,在紧急恢复后,他正在排查代码,查了好一会。我回头一看,这错误提醒很明显就是致命错误,较好定位。

但此时,他竟然在查 panic-recover 是不是哪里漏了,我表示大受震惊...

今天就由煎鱼给大家分享一下错误类型有哪几种,又在什么场景下会触发。

错误类型

error

第一种是 Go 中最标准的 error 错误,其真身是一个 interface{}。

如下:

type error interface {
    Error() string
}
复制代码

在日常工程中,我们只需要创建任意结构体,实现了 Error 方法,就可以认为是 error 错误类型。

如下:

type errorString struct {
    s string
}

func (e *errorString) Error() string {
    return e.s
}
复制代码

在外部调用标准库 API,一般如下:

f, err := os.Open("filename.ext")
if err != nil {
    log.Fatal(err)
}
// do something with the open *File f
复制代码

我们会约定最后一个参数为 error 类型,一般常见于第二个参数,可以有个约定俗成的习惯。

panic

第二种是 Go 中的异常处理 panic,能够产生异常错误,结合 panic+recover 可以扭转程序的运行状态。

如下࿱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值