V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
kuanat
V2EX  ›  Go 编程语言

Go 语言的错误处理语法,不改了!

  •  
  •   kuanat · 2025 年 6 月 5 日 · 8148 次点击
    这是一个创建于 225 天前的主题,其中的信息可能已经有所发展或是发生改变。

    官方 blog 在这里 https://go.dev/blog/error-syntax

    原文本身不是太长,主要说了几种曾经考虑的方案。具体方案讨论链接里的内容就很多了。

    最终决定不改了的主要理由是没有形成共识,次要理由是这事不太重要。

    68 条回复    2025-06-09 19:08:12 +08:00
    rmrf
        1
    rmrf  
       2025 年 6 月 5 日
    挺好的,不折腾了
    momowei
        2
    momowei  
       2025 年 6 月 5 日
    没有特别好的方案吧 ,哪种方案都有反对的,现在的就是裹脚布,但没啥问题,有 ai 就更不是问题了
    RedisMasterNode
        3
    RedisMasterNode  
       2025 年 6 月 5 日   ❤️ 16
    明明强制做错误判断才是最好的姿势,还好没改)
    nativeBoy
        4
    nativeBoy  
       2025 年 6 月 5 日 via Android
    vscode 有个插件可以把错误处理代码变得透明,这有利于浏览代码,没那么杂乱
    lloovve
        5
    lloovve  
       2025 年 6 月 5 日 via iPhone
    我觉得挺好
    coyove
        6
    coyove  
       2025 年 6 月 5 日
    官方做人,终于干了件正事
    WaterWestBolus
        7
    WaterWestBolus  
       2025 年 6 月 5 日
    @nativeBoy 请问名字是?
    wfhtqp
        8
    wfhtqp  
       2025 年 6 月 5 日
    挺好的
    Akitora
        9
    Akitora  
       2025 年 6 月 5 日
    我明明觉得 ? 这个方案挺好的……
    deacyn
        10
    deacyn  
       2025 年 6 月 5 日 via iPhone
    @nativeBoy 同问这个插件。
    xfriday
        11
    xfriday  
       2025 年 6 月 5 日
    @RedisMasterNode a, _ := foo() 怎么强制?又不是 Rust 可以返回 enum ,必须要判断
    Lightbright
        12
    Lightbright  
       2025 年 6 月 5 日
    @deacyn #10 lowlight go errors
    Razio
        13
    Razio  
       2025 年 6 月 5 日
    不改挺好的,error 强迫症福利。反正改不改,怎么改都会被反对,浪费精力,没意义
    xuhuanzy
        14
    xuhuanzy  
       2025 年 6 月 5 日 via Android
    这种具有争议的问题要投票改等于不改,假惺惺的开个讨论装装样子
    tongbufu
        15
    tongbufu  
       2025 年 6 月 5 日 via iPhone
    这是好事儿啊
    dacapoday
        16
    dacapoday  
       2025 年 6 月 5 日
    本来就不需要改,尤其现在 AI 能帮着写。
    bronyakaka
        17
    bronyakaka  
       2025 年 6 月 5 日   ❤️ 10
    if err != nil 是 go 粉应得的
    Lockroach
        18
    Lockroach  
       2025 年 6 月 5 日
    不改以后就能有一个新语言可以打着 go 后继者的名声出来,想好了,就叫下一代的后端语言,摒弃 if .. != nil ,性能更高等等特性🐶
    XIVN1987
        19
    XIVN1987  
       2025 年 6 月 5 日
    挺好,,没有共识就暂时保持现状,,等有绝大多数人都满意的方案了再改。。
    Felldeadbird
        20
    Felldeadbird  
       2025 年 6 月 5 日
    error 处理我觉得挺好的,都明确错误。啰嗦是啰嗦,安全是安全。
    rozbo
        21
    rozbo  
       2025 年 6 月 5 日
    众口难调啊,但是 ? 这个还有人反对的话,确实没必要进行下去了。。。
    noyidoit
        22
    noyidoit  
       2025 年 6 月 5 日
    挺好的,以后都不用想着这件事了。个人觉得不管是读还是写`if err!=nil`都没什么代价,改掉它的收益大概只会随着 AI 普及越来越低
    fioncat
        23
    fioncat  
       2025 年 6 月 5 日
    个人觉得 ? 是最接近的。但是很多人觉得隐晦。
    可能是用户习惯问题,Rust 那边 ? 满天飞好像抱怨的人不多
    duzhuo
        24
    duzhuo  
       2025 年 6 月 5 日
    @bronyakaka 已经是语言特色了,不写 golang 的人都知道这个
    littlewing
        25
    littlewing  
       2025 年 6 月 5 日   ❤️ 1
    不理解这种错误处理方式有啥问题吗?写 C/C++ 都是通过返回值来表示是否成功的,虽然 C++ 有异常处理机制,但是几乎不用
    xjzshttps
        26
    xjzshttps  
       2025 年 6 月 5 日
    由 ide 的情况下 if err 真没什么大问题。
    写的时候 goland 自动写,看的时候 ide 会折行。
    kfpenn
        27
    kfpenn  
       2025 年 6 月 5 日
    不改挺好的
    henix
        28
    henix  
       2025 年 6 月 5 日
    个人认为 Go 没有 C 那种宏挺遗憾的,有的话一个宏就搞定了,但现在这样也问题不大,反正已经写了这么多年了
    Yadomin
        29
    Yadomin  
       2025 年 6 月 5 日   ❤️ 1
    说的他们好像多在乎用户意见一样,达不成共识就不改了,那怎么泛型写的一坨屎还能上呢?说白了 golang 就是 sb Google 的一言堂罢了。
    liuguang
        30
    liuguang  
       2025 年 6 月 5 日   ❤️ 1
    go 语言最 sb 的一点是每一层都要来一个 if err!=nil
    mightofcode
        31
    mightofcode  
       2025 年 6 月 5 日
    躺平了
    guidao
        32
    guidao  
       2025 年 6 月 5 日
    挺好的。KISS
    Steaven
        33
    Steaven  
       2025 年 6 月 5 日
    要是有一个组合的语法就好,像 erlang 这样 https://www.erlang.org/blog/my-otp-25-highlights/#motivation
    lewin18
        34
    lewin18  
       2025 年 6 月 5 日
    挺好的,kpi 爽到爆。
    ShaunSS
        35
    ShaunSS  
       2025 年 6 月 5 日
    喜大普奔
    hellopz
        36
    hellopz  
       2025 年 6 月 5 日
    @nativeBoy goland 有类似的插件吗
    janyork
        37
    janyork  
       2025 年 6 月 5 日
    挺好的
    PTLin
        38
    PTLin  
       2025 年 6 月 5 日   ❤️ 1
    设想下平行世界中加了新的错误处理的 Google 会怎么说。

    我们尊重开发者意见,为 go 增加了新的错误处理机制,让这个已经有 10 多年历史的语言重新焕发生机,我们知道可能会有很长时间转型的“阵痛期”,但是这一切都是为了更好的 go 语言进行服务。
    过去的几年中 go 语言的变化很大,经历了泛型,range over func 等重大特性,并且这次引入的全新错误处理,我们相信 go 语言可以持续的焕发生机,迎接新时代的挑战。
    我们是持续拥抱变化,尊重开发者的 go 团队(狗头
    razeen
        39
    razeen  
       2025 年 6 月 5 日
    挺好,有了 AI ,写完 `err :=` `if err != nil` 就自动补全了 ![]( )
    levelworm
        40
    levelworm  
       2025 年 6 月 6 日 via Android
    除非是严重的错误,否则不折腾是最好的。我高看他一眼。
    chachi
        41
    chachi  
       2025 年 6 月 6 日
    让我想起了 vb 的 on error resume next 和 if err.number<>0 then
    Crawping
        42
    Crawping  
       2025 年 6 月 6 日
    还好没改..
    AI 纪元下 无非就是按一下 Tab 的事儿啊, 目前虽然啰嗦 但是并没有任何心智负担,纯纯流水账. 简单清晰, 非要省那么点不要钱的行数 把代码弄的晦涩么.. (本人主要写 C++ 十几年了从不用 try catch 1:容易渗漏传染 2:第一现场不明确)
    agagega
        43
    agagega  
       2025 年 6 月 6 日
    上面提到 C++的,C++类型系统足够强大,使用类似 Rust 的 ADT 机制处理错误完全不是问题,甚至 optional 和 expected 已经是标准一部分了
    ryuj
        44
    ryuj  
       2025 年 6 月 6 日
    @razeen 这头像闪瞎我
    KellaTeRyan
        45
    KellaTeRyan  
       2025 年 6 月 6 日
    @razeen 就属你的头像最亮眼。
    dwu8555
        46
    dwu8555  
       2025 年 6 月 6 日
    @razeen #39 亮仔
    viking602
        47
    viking602  
       2025 年 6 月 6 日
    @razeen 闪瞎我了
    covering
        48
    covering  
       2025 年 6 月 6 日
    @razeen 成功引起了我的关注
    htxy1985
        49
    htxy1985  
       2025 年 6 月 6 日
    不懂就问,39 楼的头像怎么了,我没看到有什么不同啊
    zpvip
        50
    zpvip  
       2025 年 6 月 6 日
    现在有 AI 了, javascript 我都用 AI 给我的 vanilla-js, bugfix 也是自己做, 大部分情况下根本不看代码.

    以后 AI 就直接写二进制了, 人类不用参与, 显得多余.
    rainfd
        51
    rainfd  
       2025 年 6 月 6 日
    反正我写没觉得有多大问题,大家意见都不统一,干脆别改
    bv
        52
    bv  
       2025 年 6 月 6 日
    @nativeBoy 作为一个 gopher 已经能够自动忽略 err 噪音。就像人眼会自动忽略自己的鼻子一样,当你可以关注自己的鼻子时,又能看得到它。
    nativeBoy
        53
    nativeBoy  
       2025 年 6 月 6 日 via Android
    @WaterWestBolus
    @deacyn
    插件名为 Lowlight Go Errors

    @hellopz goland 用的少,没发现过

    @bv 你可以习惯它,但它永远在那
    akiyamamio
        54
    akiyamamio  
       2025 年 6 月 6 日
    直接 panic 处理!
    pkoukk
        55
    pkoukk  
       2025 年 6 月 6 日
    @PTLin 等一下!看你的回复才发现 1.23 把 range over func 这种脏东西加进来了。
    Pencillll
        56
    Pencillll  
       2025 年 6 月 6 日 via Android
    看了一下列出的几点理由,差不多就是"我们本可以做点什么,但现在已经晚了"
    realpg
        57
    realpg  
    PRO
       2025 年 6 月 6 日
    @littlewing #25
    JAVA 人总是希望谁都改成他们最习惯的样子
    loading
        58
    loading  
       2025 年 6 月 6 日   ❤️ 1
    按 fmt 这种强制的思路,不改才是语言特色。

    当时我想,如果它改了,我就不用 GO 了。
    bianxiaoxian
        59
    bianxiaoxian  
       2025 年 6 月 6 日
    @htxy1985 深色模式
    joeycheek
        60
    joeycheek  
       2025 年 6 月 7 日
    都习惯了,不改也好
    yijiangchengming
        61
    yijiangchengming  
       2025 年 6 月 7 日
    我已经习惯了 GO 的错误处理,它能减少意外的错误。即使明确不需要错误处理,此处不可能发生错误,使用_即可规避。
    Miranquil
        62
    Miranquil  
       2025 年 6 月 8 日 via iPhone
    @Felldeadbird 现在的处理可和安全一个字都不沾边
    xuanbg
        63
    xuanbg  
       2025 年 6 月 8 日
    @momowei 你们所鄙视的 Java 也是这么想的,多敲几行代码也能叫事?代码易读易维护才是最重要的。何况现在谁还手写代码啊,不都是让 AI 干这些脏活累活的么
    codefun666
        64
    codefun666  
       2025 年 6 月 8 日
    Go 的错误处理显然借鉴了内核的错处处理方式,习惯就好了,没毛病。
    ranran
        65
    ranran  
       2025 年 6 月 8 日
    VB 的异常处理也很烦,不过习惯就好了
    guzzhao
        66
    guzzhao  
       2025 年 6 月 9 日
    能多加一些 error 的工具类也不错
    picone
        67
    picone  
       2025 年 6 月 9 日   ❤️ 1
    @henix 宏一旦被滥用,对代码的可读性那是灾难
    bunny189
        68
    bunny189  
       2025 年 6 月 9 日 via iPhone
    我觉得 if err != nil 挺好的,写多了还……还挺爽的
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1098 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 23:48 · PVG 07:48 · LAX 15:48 · JFK 18:48
    ♥ Do have faith in what you're doing.