如何检查错误类型?

时间:2017-05-12 22:05:06

标签: go

我想从我调用的函数中检查错误类型,看它是否是由deadlineExceededError引起的,但我没有看到引用它的方法。我想我总是可以检查.Error()字符串,但我被告知这是不赞成的。

为了调试目的,它也被设置为2微秒,我意识到它应该改为time.Minute

有问题的函数Godoc:https://godoc.org/github.com/moby/moby/client#Client.ContainerStart

//if the container fails to start after 2 minutes then we should timeout
ctx, cancel := context.WithTimeout(ctx, 2*time.Microsecond)

defer cancel()
// Do the actual start
if err := myClient.ContainerStart(ctx, containerName, types.ContainerStartOptions{}); err != nil {
    fmt.Printf("%v\n", err) //prints: 'context deadline exceeded'
    fmt.Printf("%T\n", err) //prints: 'context.deadlineExceededError'
    switch e := err.(type) {
    case //how do I check for deadlineExceededError:
         //print that it timed out here
    }
    return err
}

1 个答案:

答案 0 :(得分:4)

context package exposes this value as a variable

您可以比较err == context.DeadlineExceeded

但是,作为argued by Dave Cheney,你应该使用一个接口。

具体而言,net.Errorinterface { Timeout() bool }将作为一种类型。