The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
kuanat

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

  •  
  •   kuanat · Jun 5, 2025 · 9253 views
    This topic created in 520 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

    @hellopz goland 用的少,没发现过

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

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