V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hyq
V2EX  ›  编程

golang 里面是如何处理错误的

  •  
  •   hyq · 2012-10-27 16:56:04 +08:00 · 6661 次点击
    这是一个创建于 4400 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假设有如下代码

    请问如何确定出错的原因?我看文档里面对这部分介绍得很少啊
    14 条回复    1970-01-01 08:00:00 +08:00
    wayn3h0
        1
    wayn3h0  
       2012-10-27 17:02:16 +08:00
    error类型可返回具体信息
    tioover
        2
    tioover  
       2012-10-27 17:04:50 +08:00
    Go设计者觉得异常处理是邪道,所以只能用传统方法
    hyq
        3
    hyq  
    OP
       2012-10-27 17:15:48 +08:00
    @wayn3h0 我看了文档,又读了源码,总觉得返回的信息不完全,还不如C语言的Socket api好用。
    hyq
        4
    hyq  
    OP
       2012-10-27 17:17:18 +08:00
    @tioover
    @wayn3h0
    实际上我也知道在golang里面是可以获取到错误信息的,但是在调用golang库函数的时候,它到底返回的是个什么错误,文档里面却没说明白
    wayn3h0
        5
    wayn3h0  
       2012-10-27 18:19:28 +08:00
    @hyq 你可以判断具体Error类型,错误类型都是实现Error接口的 如果文档没有说明,进代码看看就行了
    hyq
        6
    hyq  
    OP
       2012-10-29 12:00:55 +08:00
    @wayn3h0 看了一下代码,还是一片模糊,很多问题都不知道怎么解决,比如net.Dial连接服务器失败,根本不知道是因为网络问题,还是服务器没开放端口。不过只要它不崩溃就行了,可能是因为golang还不成熟吧,将就着用用
    dndx
        7
    dndx  
       2012-10-29 13:02:53 +08:00
    @tioover 没错,Go的设计者之一是C语言之父Ken Thompson(就是K&R里的K),所以这么做就不难理解了。
    wayn3h0
        8
    wayn3h0  
       2012-10-29 13:36:48 +08:00
    @hyq please check dial.go & net.go src file

    DNSConfigError AddrError UnknowNetworkError will be returned in error, and you can check timeout error or temporary error by Timerout() & Temporary() method(s)...
    hyq
        9
    hyq  
    OP
       2012-10-29 13:40:11 +08:00
    @wayn3h0 好吧,这个我也看到了,不过我还是想抱怨下,为什么不像java一样,把会返回的异常类型给列出来。文档里面都找不到
    wayn3h0
        10
    wayn3h0  
       2012-10-29 13:45:51 +08:00   ❤️ 1
    好吧,又误点"感谢"

    @hyq 引入异常机制和go的设计理念冲突
    再说返回 Error接口和异常有什么不同?
    wayn3h0
        11
    wayn3h0  
       2012-10-29 13:47:00 +08:00
    @hyq golang最大的不足在文档
    hyq
        12
    hyq  
    OP
       2012-10-29 13:48:37 +08:00
    @wayn3h0 我不是说他有问题,而是说文档里面为什么没说明会返回什么错误,这样造成了极大的不便
    Alex_L
        13
    Alex_L  
       2012-10-29 16:14:44 +08:00
    @dndx K&R里的K是Kernighan不是Ken
    clowwindy
        14
    clowwindy  
       2012-10-29 16:35:38 +08:00
    go 的文档是 python 风格的,要弄清楚不明确的地方,需要看源码
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3111 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 13:29 · PVG 21:29 · LAX 05:29 · JFK 08:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.