我想从我调用的函数中检查错误类型,看它是否是由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
}
答案 0 :(得分:4)
context package exposes this value as a variable。
您可以比较err == context.DeadlineExceeded
。
但是,作为argued by Dave Cheney,你应该使用一个接口。
具体而言,net.Error
或interface { Timeout() bool }
将作为一种类型。