【问题标题】:Managing errors in golang在 golang 中管理错误
【发布时间】:2015-06-19 14:53:09
【问题描述】:

我来自 Ruby,目前正在研究 Go。我开始编写一些代码来检查给定主机的 TLS 支持。

var tls_versions = map[uint16]string{ tls.VersionSSL30: "SSLv3", tls.VersionTLS10: "TLSv1.0", tls.VersionTLS11: "TLSv1.1", tls.VersionTLS12: "TLSv1.2", } var denied_re = regexp.MustCompile(": 连接被拒绝") var nodns_re = regexp.MustCompile(": 没有这样的主机") var versionnotsupported_re = regexp.MustCompile(": 协议版本不支持") func checkversion(host string) (map[string]bool, error) { // {{ ret := 地图[字符串]布尔{} 对于版本:= tls.VersionSSL30;版本

来自 Ruby,我发现这段代码中的错误管理非常丑陋,因为我只是一个错字/改变,因为我没有得到错误的正确原因。我试图玩反射,但无法让它做我想做的事。我想知道我是否遗漏了一些明显的东西,或者它是否是可行的方式?还是它特定于 crypto/tls 库以避免从任何问题中恢复?

感谢您的帮助。

【问题讨论】:

    标签: go


    【解决方案1】:

    在 Go 中有很好的错误管理的可能性。

    请参阅 Dave C 的 this answer 以获得很好的总结和很好的示例。

    不幸的是,如果是 tls 包,你就不走运了。您尝试检测的错误是由fmt.Errorf() 调用(委托给errors.New())生成的,因此它们在任何方面都不特殊,也没有预先声明,因此您无法比当前的解决方案做得更好来区分他们。可能开发人员懒于提供更复杂或更容易追踪的错误,或者只是他们认为这不重要而为了简单而忽略了;因此它们目前为开发者提供更多信息。

    进一步阅读(引自 Dave C 的回答):

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-04
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    相关资源
    最近更新 更多