三丈 vs 阎王直播视频,一场关于尺度与逻辑的Go语言解构

你知道吗?最近有个叫“三丈vs阎王直播视频”的东西,在网上闹得挺凶,我一开始以为是什么武侠大片,结果点进去一看,好家伙,是两个程序员...

你知道吗?最近有个叫“三丈 vs 阎王直播视频”的东西,在网上闹得挺凶,我一开始以为是什么武侠大片,结果点进去一看,好家伙,是两个程序员在直播里用Go语言辩论——不是打架,是辩论,三丈说“Go的错误处理就该简单粗暴”,阎王立马怼回去“那你不如写C”,这视频火了,不是因为吵架,是因为它戳中了很多Go开发者的痛点。

我先说结论:这场直播视频,本质上是两种编码哲学在Go语言里的正面碰撞,三丈代表的是实用主义,阎王代表的是严谨主义,两者没有绝对对错,但如果你能看懂他们争论的每一个技术点,你的Go水平至少提升一个档次。

直播里到底吵了什么?

视频大概一个小时,我挑几个关键片段说。

错误处理的“三丈式” vs “阎王式”

三丈写了一段代码:

func doSomething() error {
    data, err := fetchData()
    if err != nil {
        return err
    }
    // 处理 data
    return nil
}

他说“这有什么问题?Go官方就是这么教的”,阎王抓狂了:“你连上下文都不加?” 他当场改成了这样:

func doSomething() error {
    data, err := fetchData()
    if err != nil {
        return fmt.Errorf("fetchData failed: %w", err)
    }
    // 处理 data
    return nil
}

阎王的意思是:裸返回错误,等于告诉调用方“你自己猜哪儿挂了”。 三丈反驳:“小项目哪来那么多层级?你加那么多包装,日志打印出来全是堆栈,调试反而累。”

你看,这就是典型的生产环境 vs 维护性矛盾,三丈在中小型项目里混得多,阎王可能天天写微服务中间件。

接口设计的“最小化”与“完备性”

后半段视频,两人对接口大小吵起来了,三丈写了一个接口:

type UserService interface {
    GetUser(id int) (*User, error)
    CreateUser(u *User) error
}

阎王说“太瘦了”,他加上了:

type UserService interface {
    GetUser(id int) (*User, error)
    CreateUser(u *User) error
    UpdateUser(u *User) error
    DeleteUser(id int) error
    ListUsers(filter map[string]interface{}) ([]*User, error)
}

三丈说“你这是把数据库操作直接暴露给接口使用者,违反接口隔离原则”,阎王说“那你让调用方自己拼SQL?”两人又杠上了。

这场面让我想起很多Go新手项目:要么接口大得跟ORM一样,要么小得跟回调函数一样。最好的接口是刚好够用,不多不少。 但什么是“刚好”?三丈说了句挺经典的话:“接口是设计出来的,不是定义出来的,你先把实现写完,再回头看哪些方法需要被外部调用。”

并发模型的“实战”与“理想”

这可能是最激烈的部分,阎王展示了一个goroutine池的方案:

特性 三丈版本 阎王版本
任务队列 有缓冲channel 无缓冲channel + 速率限制
错误收集 直接log.Fatal 用errorgroup收集
优雅关闭 没有 有context超时
复健测试 没有 有单元测试+模拟

三丈说:“你写这么复杂,业务代码都放哪儿?”阎王说:“业务代码应该和并发控制分离。 你混在一起,过两个月你自己都看不懂。”

我同意阎王,但三丈也没全错——小工具里搞个errorgroup确实是杀鸡用牛刀,问题是,这视频面向的观众,大部分写的是小工具,还是大型系统?技术选型从来不是绝对的,而是基于场景的判断。

为什么这个视频值得每个Go开发者看?

不说虚的,我列几点真实收益:

  • 学会高级错误处理:不只是%w,还有errors.Iserrors.As的用法,阎王展示了如何在一个函数里依次处理多种错误类型。
  • 接口设计原则:三丈演示了如何用非入侵式接口,在第三方库不做修改的情况下,实现自己的适配层,这招在写测试mock时特别有用。
  • 并发控制模式:阎王用sync.WaitGroupcontext.Contexterrgroup三个工具拼出了一个标准生产级方案,跟三丈原始版本形成了鲜明对比。
  • 代码可读性:两个人代码风格完全不同,三丈的代码像日记,直白但缺注释;阎王的像法律条文,严谨但读起来累。你只能选一种,但你看过两种后,就知道自己更需要哪一方面的训练。

一些真实的“不完美”观察

说实话,视频里有些地方三丈明显在杠,比如他坚持不用fmt.Errorf,说“加个包装就多一行代码,多一次缩进”,但阎王问他以后怎么追踪bug根源时,他愣了两秒说“加注释”,这回答明显不够硬,反过来,阎王也暴露了一个问题:他的代码规范得像个教科书,却忘了Go也是门写起来很快的语言,你追求完美主义,可能迭代速度就会降下来。

视频弹幕里有人说“三丈是野路子,阎王是科班”,我不完全同意,三丈的写法在开源小项目里很常见,而阎王的风格更像是大厂代码规范。两个人没有谁对谁错,只有谁更适合你的项目。

三丈 vs 阎王直播视频,一场关于尺度与逻辑的Go语言解构

最后我想说

这场直播视频,表面上是两人在争论Go的编码细节,实际上是两种开发习惯的博弈,你如果刚学Go,我建议你先模仿三丈,快速写出可运行的代码,再往后看阎王的视频,开始加错误包装、加接口隔离、加优雅关闭。别想一步到位,也别永远停留在“能跑就行”的阶段。

你现在打开这个视频,看到的不应该只是吵架,而是两个有经验的开发者在用自己的角度诠释Go语言的可能性,抄谁的都不丢人,丢人的是不思考,你看完这个分析,大概率已经比视频里一半的弹幕观众强了——因为至少你在想:我到底站哪一边?

本文来自作者[kyadmin]投稿,不代表中国·AC米兰(Milan)体育官方网站-Official Website立场,如若转载,请注明出处:http://www.appsource.cn/ly/1201.html

(8)

文章推荐

发表回复

本站作者才能评论

评论列表(4条)

  • kyadmin
    kyadmin 2026-07-15

    我是中国·AC米兰(Milan)体育官方网站-Official Website的签约作者“kyadmin”!

  • kyadmin
    kyadmin 2026-07-15

    希望本篇文章《三丈 vs 阎王直播视频,一场关于尺度与逻辑的Go语言解构》能对你有所帮助!

  • kyadmin
    kyadmin 2026-07-15

    本站[中国·AC米兰(Milan)体育官方网站-Official Website]内容主要涵盖:AC米兰,ac米兰官网,AC米兰官网

  • kyadmin
    kyadmin 2026-07-15

    本文概览:你知道吗?最近有个叫“三丈vs阎王直播视频”的东西,在网上闹得挺凶,我一开始以为是什么武侠大片,结果点进去一看,好家伙,是两个程序员...

    联系我们

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注我们