我正在学习go,并试图理解如何从通用错误类型中获取更详细的错误信息.我将使用的示例来自net软件包,特别是DialTimeout function.
签名是
func DialTimeout(network, address string, timeout time.Duration) (Conn, error)
个
error类型仅定义Error() string
函数.如果我想找出DialTimeout失败的确切原因,我如何才能获得该信息?我发现可以使用类型断言来获取net.Error
特定错误:
con, err := net.DialTimeout("tcp", net.JoinHostPort(address, "22"),
time.Duration(5) * time.Second)
if err != nil {
netErr, ok := err.(net.Error)
if ok && netErr.Timeout() {
// ...
}
}
但那只能告诉我我是否超时了.例如,假设我想区分拒绝的连接和没有到主机的路由.我怎么才能做到这一点呢?
也许DialTimeout级别太高,不能给我提供这样的细节,但即使查看syscall.Connect个,我也不知道如何获得具体的错误.它只是说它返回泛型错误类型.将其与POSIXconnect进行比较,它会让我知道它失败的原因,并显示各种返回代码.
我的一般问题是:如果Golang文档不告诉我可能返回哪种类型的错误,我如何从通用的error
类型中提取错误详细信息?