因此,我看到的大多数 go 错误处理示例只是将任何错误传递回堆栈。在某些时候,这些需要解释,这就是我想要做的。这是我尝试的一个片段:
resp, err := http.Get(string(url))
defer out_count.Dec()
if err != nil {
switch err {
case http.ErrBodyReadAfterClose:
fmt.Println("Read after close error")
case http.ErrMissingFile:
fmt.Println("Missing File")
{some more cases here}
case io.EOF:
fmt.Println("EOF error found")
default:
fmt.Printf("Error type is %T\n", err)
panic(err)
}
return
这对我目前的情况不起作用(编辑删除 url}:
ERROR: Failed to crawl "http://{removed URL}"
Error type is *url.Error
panic: Get http://{removed url}: EOF
goroutine 658 [running]:
runtime.panic(0x201868, 0x106352c0)
/usr/lib/go/src/pkg/runtime/panic.c:279 +0x1a0
github.com/cbehopkins/grab/grab.crawl(0x10606210, 0x27, 0x105184b0, 0x105184e0, 0x10500460)
我想不出一种方法来让 switch 语句捕捉到这个错误,因为错误的文本每次都会改变,并且没有我可以捕捉到的明确值。(因为 URL 一直在变化)。现在也许我可以在 case 语句中进行某种正则表达式匹配或对错误字符串进行子切片,但这感觉是解决此问题的一种非常糟糕的方法。
有什么建议?一定有一种惯用的方法来捕捉这样的错误吗?
长风秋雁
繁花不似锦
相关分类