Go通过error接口显式处理错误,errors.New创建错误,errors.Is判断错误类型,os.Open等函数返回error,nil表示成功。
在Golang中,错误处理是程序健壮性的核心部分。Go语言没有异常机制,而是通过返回error类型显式处理错误。合理使用errors包和相关实践能提升代码可读性和维护性。
Go中的error是一个内建接口:
type error interface {
Error() string
}
任何实现Error()方法的类型都可以作为错误使用。标准库函数通常在最后返回一个error,如果操作成功,则返回nil。
file, err := os.Open("config.json")
if err != nil {
log.Fatal(err)
}
defer file.Close()
Go的errors包提供基础功能来创建和判断错误。
errors.New():创建一个带有简单消息的错误。errors.Is():判断一个错误是否是目标错误(自Go 1.13)。var ErrNotFound = errors.New("record not found")
func findUser(id int) (*User, error) {
if id <= 0 {
return nil, ErrNotFound
}
// ...
}
使用 errors.Is 判断错误类型
user, err := findUser(0)
if errors.Is(err, ErrNotFound) {
fmt.Println("用户未找到")
}
从Go 1.13开始,fmt.Errorf支持%w动词来包装错误,保留原始错误信息,形成错误链。
func readFile(path string) error {
data, err := os.ReadFile(path)
if err != nil {
return fmt.Errorf("读
取文件失败: %w", err)
}
// 处理数据...
return nil
}
之后可以用errors.Unwrap()或errors.Is()、errors.As()分析底层错误。
当错误链中包含自定义错误类型时,可用errors.As()将其赋值到对应变量。
type ValidationError struct {
Field string
Msg string
}
func (e *ValidationError) Error() string {
return fmt.Sprintf("验证失败: %s (%s)", e.Field, e.Msg)
}
func validateEmail(email string) error {
if !strings.Contains(email, "@") {
return &ValidationError{Field: "email", Msg: "格式不正确"}
}
return nil
}
提取并处理特定错误
err := validateEmail("invalid-email")
var ve *ValidationError
if errors.As(err, &ve) {
fmt.Printf("字段 %s 出错: %s\n", ve.Field, ve.Msg)
}
基本上就这些。掌握errors.New、fmt.Errorf配合%w、以及errors.Is和errors.As,就能写出清晰且可维护的错误处理逻辑。不复杂但容易忽略细节。
# js
# json
# go
# golang
# go语言
# 代码可读性
# 标准库
# Error
# 接口
相关文章:
高防服务器租用指南:配置选择与快速部署攻略
公司门户网站制作流程,华为官网怎么做?
学校建站服务器如何选型才能满足性能需求?
建站之星如何快速更换网站模板?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
三星网站视频制作教程下载,三星w23网页如何全屏?
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何快速生成可下载的建站源码工具?
如何在Ubuntu系统下快速搭建WordPress个人网站?
建站主机核心功能解析:服务器选择与网站搭建流程指南
如何制作网站标识牌,动态网站如何制作(教程)?
北京建设网站制作公司,北京古代建筑博物馆预约官网?
招贴海报怎么做,什么是海报招贴?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
建站主机功能解析:服务器选择与快速搭建指南
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
制作网站的基本流程,设计网站的软件是什么?
已有域名如何快速搭建专属网站?
如何在云主机上快速搭建网站?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
香港网站服务器数量如何影响SEO优化效果?
如何用VPS主机快速搭建个人网站?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
b2c电商网站制作流程,b2c水平综合的电商平台?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
定制建站策划方案_专业建站与网站建设方案一站式指南
如何通过主机屋免费建站教程十分钟搭建网站?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
简单实现Android文件上传
如何在阿里云香港服务器快速搭建网站?
深圳网站制作平台,深圳市做网站好的公司有哪些?
简历在线制作网站免费版,如何创建个人简历?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
,sp开头的版面叫什么?
大连网站设计制作招聘信息,大连投诉网站有哪些?
山东云建站价格为何差异显著?
建站之星如何实现五合一智能建站与营销推广?
常州企业建站如何选择最佳模板?
已有域名如何免费搭建网站?
建站之星好吗?新手能否轻松上手建站?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
小程序网站制作需要准备什么资料,如何制作小程序?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
如何在香港服务器上快速搭建免备案网站?
制作网站的公司有哪些,做一个公司网站要多少钱?
*请认真填写需求信息,我们会在24小时内与您取得联系。