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

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

  •  
  •   kuanat · 58 天前 · 7320 次点击
    这是一个创建于 58 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    @hellopz goland 用的少,没发现过

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

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