GO错误处理【7】层层递进,环环相扣

我算是知道GO的思想了,真的是层层递进,环环相扣

"层层递进,环环相扣"就是对 Go 工程哲学最神准的总结。

从你最开始问的"变量存指针还是值",到"配置解析",再到现在的"错误链条",其实都在围着这一个核心转:确定性。

为了让你这套"环环相扣"的逻辑更丝滑,我给你分享一个在 Logic(业务层)减少"复读机"代码的小技巧,这能让你在写那一堆 if err != nil 时不那么痛苦。

1. "逻辑扁平化":别让代码长成"金字塔"

PHP 习惯嵌套,但 Go 提倡"早报错,早返回"。

  • 反面教材(套娃式):

    复制代码
    func Biz() error {
        err := step1()
        if err == nil {
            err = step2()
            if err == nil {
                // ... 无限嵌套
            }
        }
        return err
    }
  • Go 风格(卫语句):

    复制代码
    func Biz() error {
        if err := step1(); err != nil {
            return fmt.Errorf("第一步就跪了: %w", err)
        }
        if err := step2(); err != nil {
            return fmt.Errorf("第二步没跟上: %w", err)
        }
        return nil
    }

    你看,虽然 if err 多了,但代码是垂直向下的,逻辑非常清晰。

2. 巧用局部变量接力

既然要环环相扣,上一环的结果往往是下一环的输入:

复制代码
func (l *UserLogic) UpgradeVIP(uid int) error {
    // 1. 第一环:找人
    user, err := l.repo.GetByID(uid)
    if err != nil {
        return fmt.Errorf("找人失败: %w", err)
    }

    // 2. 第二环:算钱(基于第一环的结果)
    price, err := l.payService.Calculate(user.Level)
    if err != nil {
        return fmt.Errorf("算账失败 (Level:%d): %w", user.Level, err)
    }

    // 3. 第三环:落库
    return l.repo.UpdateLevel(uid, price) 
}

3. 给老哥的"赛道总结"

你现在已经把 Go 的脉络摸清楚了:

  1. 数据流:靠返回值(Value, error)层层传递。
  2. 错误流:靠包装(%w)环环相扣。
  3. 日志流:靠顶层(Middleware/Handler)一锤定音。
  4. 配置流:靠工厂函数(NewConfig)和指针(*Config)全局供给。

这四条流跑通了,你的后端项目就像一台精密运转的内燃机,哪里漏油(报错)、哪里卡壳(性能)一眼就能看出来。

相关推荐
FungLeo2 小时前
成为全栈·Go 后端篇·重写之前先锁基线:契约、Node 版本与行为清单
golang·node.js·go·openapi·契约测试·成为全栈
小满zs13 小时前
Go语言第十七章(反射)
后端·go
小满zs13 小时前
Go语言第十五章(JSON序列化)
后端·go
小满zs13 小时前
Go语言第十六章(自定义类型)
后端·go
w-w0w-w13 小时前
Go语言学习day1
go
FungLeo1 天前
成为全栈·Go 后端篇·契约一致性与差分测试:两套实现如何互相校验
golang·node.js·go·合约测试·差分测试·成为全栈·api兼容
vipxieliang1 天前
Go 1.25 Green Tea GC 深度解析:以页为单位的垃圾回收新范式
go
孔令飞1 天前
AI 时代岗位调研分析:调研了近3000份AI岗位描述,分享下调研结果
云原生·go·ai编程
我不会起名字3221 天前
Redis 从 0 到 1(十二):先删缓存还是先更新库?4 种方案的 Go 并发实测
redis·go·并发·延迟双删·缓存一致性
FungLeo2 天前
成为全栈·Go 后端篇·用 Go 重写分层架构:领域包、装配根与最小抽象
golang·go·领域驱动设计·gorm·分层架构·成为全栈