因此,大多數go錯誤處理的示例只是將任何錯誤都傳遞迴堆棧。在某些時候,這些需要解釋,而這正是我想要做的。 這是我嘗試的一個片段:解釋Golang錯誤代碼
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語句中做某種正則表達式匹配,或者對錯誤字符串進行分片,但是感覺這是一種解決此問題的非常糟糕的方式。
有什麼建議嗎?必須有一種慣用的方式來肯定地發現這樣的錯誤?
感謝您的詳盡答案! 我認爲這個問題是我得到frm標準html包的錯誤沒有提供我可以匹配的這些錯誤定義。 但是你是正確的,我可以先對錯誤類型進行切換,然後再對錯誤細節進行切換。 對於這個應用程序來說,這就足夠了,現在我只需要弄清楚如何將這個請求反饋回標準的html包。 謝謝 –