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

A 函数调用 B 函数,有没有可能在 B 不主动返回 error 的情况下,知道 B 执行过程中是否遇到了 error?

  •  
  •   zhoudaiyu ·
    PRO
    · Feb 6, 2021 · 3289 views
    This topic created in 1950 days ago, the information mentioned may be changed or developed.

    比如 B 的定义是 func b() {} 不返回 error 。

    15 replies    2021-02-07 19:42:19 +08:00
    icebay
        1
    icebay  
       Feb 6, 2021
    panic 和 recovery 满足吗?
    zhoudaiyu
        2
    zhoudaiyu  
    OP
    PRO
       Feb 6, 2021 via iPhone
    @IceBay #1 老哥怎么说 刚开始用 Go 还不太懂 panic 和 error 的关系😂
    treemonster
        3
    treemonster  
       Feb 6, 2021 via Android
    比如用 chan?
    QingXuJiaZhi
        4
    QingXuJiaZhi  
       Feb 6, 2021
    @zhoudaiyu 如果在 B 里发生 error 并且 panic, 那么在 A 里就可以通过 recover 来捕获 panic
    alazysun
        5
    alazysun  
       Feb 6, 2021
    go panic
    c++ throw
    Dongxiem
        6
    Dongxiem  
       Feb 7, 2021
    panic 能够改变程序的控制流,调用 panic 后会立刻停止执行当前函数的剩余代码,并在当前 Goroutine 中递归执行调用方的 defer ;

    recover 可以中止 panic 造成的程序崩溃,它是一个只能在 defer 中发挥作用的函数,在其他作用域中调用不会发挥作用;

    所以,如果按照楼主的意思,可以了解一下 Defer+Panic+Recover 这一套组合,看能不能满足需求。
    scnace
        7
    scnace  
       Feb 7, 2021 via Android
    这要看是单纯 func 还是 method 了,func 的话只能 panic 了(但是不推荐 换我的话可能会再 wrap 一次返回 error
    neoblackcap
        8
    neoblackcap  
       Feb 7, 2021
    虽然 panic 是可以做到,但是这不是应该通用化的做法。
    最好还是有错就返回 error,如果有可能的话,请改这个函数接口
    FinnBai
        9
    FinnBai  
       Feb 7, 2021
    是不想写 `if err != nil` 了吗...可以看看这片博客: https://blog.golang.org/errors-are-values
    lewis89
        10
    lewis89  
       Feb 7, 2021
    @Dongxiem #6 那其实就是 try-catch-finally... 结果整半天 还是回到 try catch finally 这个流程上面来了
    bfdh
        11
    bfdh  
       Feb 7, 2021
    难道不先定义下什么是 error 吗?
    dongtingyue
        12
    dongtingyue  
       Feb 7, 2021
    大哥不要老想用另一种语言的方式来写一种语言好吧。。。
    你咋不说能不能不定义变量类型,变量可以直接用+或者.拼接。
    cloverzrg2
        13
    cloverzrg2  
       Feb 7, 2021
    不主动返回 error 是指?
    B 遇到错误继续执行?
    Dongxiem
        14
    Dongxiem  
       Feb 7, 2021
    @lewis89 可能高级编程语言的设计大体上都是相通的吧。
    guo4224
        15
    guo4224  
       Feb 7, 2021
    errno??
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1104 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 18:13 · PVG 02:13 · LAX 11:13 · JFK 14:13
    ♥ Do have faith in what you're doing.