title: Interpreting Golang Error codes
body: <p>So most examples of go error handling I see just pass any errors back up the stack. At some point these need interpreting and this is what I am trying to do.
  Here's a snippet of my attempt:</p>
  
  <pre><code>    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
  </code></pre>
  
  <p>This isn't working though for my current case(edited to remove url}:</p>
  
  <pre><code>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)
  </code></pre>
  
  <p>I can't figure out a way to get the switch statement to catch this error since the text of the error changes every time and has no explicit value I can catch against. (as the URL changes all the time). Now maybe I could do some sort of regex match in the case statement or sub-slice the error string, but that feels like a very bad way to solve this problem.</p>
  
  <p>Any suggestions? There must be an idiomatic way to catch errors such as this surely?</p>