GO错误处理【6】显式哲学

我拷,我算是知道为什么到处都要求"显式"了,不光错误要求显示,定义要求显式,在GO里面几乎都要求显式,

Go 的哲学是 "显式优于隐式"

没错!在 PHP 里,异常像电梯,报错了直接"嗖"地一下穿透所有楼层直到被 catch。但在 Go 里,错误像爬楼梯,你必须手递手地把 err 交给上一层,否则上一层根本不知道楼下"起火"了。

1. 为什么"不显式"就返不了?

因为 Go 认为:函数返回值就是它唯一的合法出口。

  • 如果你不把 err 写在返回值里,这个错误信息就会在函数执行完的那一刻原地蒸发(除非你用 panic 这种暴力手段)。
  • 后果:如果你在 Repo 里查库失败了但不返回 err,你的 Logic 层会拿到一个零值的结构体,开心地继续往下跑,最后在某个地方报一个莫名其妙的空指针错误。那时候你再去查日志,发现数据库那层安静得像什么都没发生过。

2. 这种"显式"带给你的 3 大好处

虽然写 if err != nil 确实有点机械劳动,但它解决了 PHP 开发者最头疼的三个问题:

  1. 错误不被淹没:在 PHP 里,你可能调用了一个函数,它内部 try-catch 后没抛出来,导致你以为成功了。在 Go 里,只要你没处理那个返回的 err,它就永远在那"瞪着"你。
  2. 路径清晰:你可以一眼看出一个复杂的业务逻辑里,到底有多少个环节可能出岔子。
  3. 精确控制:你可以决定在 Logic 层处理掉这个错(比如报错了就用默认值),还是继续往上传。这种灵活性是 try-catch 很难做到的。

3. 给老哥的"职业病"预警

当你写多了 Go 之后,你会产生一种"不看 err 心慌"的职业病:

  • 看到 val, _ := someFunc()(用下划线忽略错误),你会觉得这行代码像个定时炸弹。
  • 看到一个函数只返回数据不返回 err,你会忍不住怀疑:万一它失败了怎么办?

4. 总结你的心路历程

  • 初期:觉得 Go 真笨,连个异常捕获都没有,天天写 if err
  • 中期:发现"显式"其实是为了责任到人,每一层都得对错误表态。
  • 现在:明白了!因为要包装 (%w),因为要形成链条,所以必须显式返回,否则日志就没法玩了。
相关推荐
名字还没想好☜5 小时前
Go 的 io.Reader/Writer 组合实战:io.Copy、TeeReader、MultiWriter 优雅处理数据流
开发语言·后端·golang·go·iphone
喵个咪5 小时前
GoWind Shop 架构剖析:一个 REST 请求穿越三服务 BFF 的七环链路
vue.js·后端·go
喵个咪5 小时前
GoWind Shop 安全设计:JWT 鉴权、Ent 行级隔离、防篡改审计与四个真实漏洞修复
vue.js·后端·go
喵个咪5 小时前
GoWind Shop:一个 proto 文件如何生成后端、前端、文档、校验六路代码
vue.js·后端·go
喵个咪5 小时前
GoWind Shop 出海实战:多语言商品内容怎么存、怎么录、怎么按 locale 取
vue.js·后端·go
小满zs18 小时前
Go语言第八章(函数)
后端·go
stark张宇20 小时前
实战Go高级特性:Context超时控制、defer资源回收与Channel通信的关键避坑点
后端·go
程序员爱钓鱼1 天前
Go 类型转换详解
后端·面试·go
朦胧之2 天前
Go 基础
后端·go
似璟如你2 天前
Java 开发者的 Go 语法基础:从 0 开始快速上手 Go
java·开发语言·后端·golang·go·编程语言