title: Multipart File Upload Validation in gin-gonic
body: <p>I am trying to add validation for the go based web application based on  GIN framework. On the web page I am selecting a file and submitting and the server is processing it.
  On the server side I am try to add validation to check if the file has been given or not. If not then redirect back to original page.</p>
  
  <pre><code>    func panic(err error)  {
          if err != nil {
              log.Println(err)
          }
      }
  
      func displayTable (c *gin.Context) {    
      file, _ , err := c.Request.FormFile("file")
      panic(err)
      if file == nil {
          log.Println("File is nil.")
          log.Println(err)
          log.Println("*****")
          c.HTML(http.StatusInternalServerError, "index.tmpl", gin.H{
              "title": "Select the input file","error" : "Please select the input file.",
          })      
      } else {
          defer file.Close()
      }
      filename := strconv.FormatInt(time.Now().Unix(),10) 
      out, err := os.Create("./tmp/"+filename+".xml")
      panic(err)
      defer out.Close()
      _, err = io.Copy(out, file)
      panic(err)
      xmlFile, err := os.Open("./tmp/"+filename+".xml")
      panic(err)
      defer xmlFile.Close()
  
      // Other Implementation Details 
  }
  </code></pre>
  
  <p>Even after providing the handling I am getting a panic in the go code. Please let me know what in the implementation am I missing.</p>
  
  <p>Thanks.</p>
  
  <pre><code>    http: no such file
      File is nil.
      http: no such file
      *****
      2015/08/04 13:19:10 Panic recovery -&gt; runtime error: invalid memory address or nil pointer dereference
      c:/go/src/runtime/panic.go:387 (0x414d36)
      c:/go/src/runtime/panic.go:42 (0x4142a5)
      c:/go/src/runtime/os_windows.go:42 (0x414066)
      c:/go/src/io/io.go:362 (0x45268f)
      D:/code/src/exmp/serverexmaple.go:45 (0x40168f)
              displayTable: _, err = io.Copy(out, file)
      D:/code/src/github.com/gin-gonic/gin/context.go:95 (0x49f8ea)
              (*Context).Next: c.handlers[c.index](c)
      D:/code/src/github.com/gin-gonic/gin/logger.go:56 (0x4ac490)
              func.007: c.Next()
      D:/code/src/github.com/gin-gonic/gin/context.go:95 (0x49f8ea)
              (*Context).Next: c.handlers[c.index](c)
      D:/code/src/github.com/gin-gonic/gin/recovery.go:43 (0x4acc80)
              func.009: c.Next()
      D:/code/src/github.com/gin-gonic/gin/context.go:95 (0x49f8ea)
              (*Context).Next: c.handlers[c.index](c)
      D:/code/src/github.com/gin-gonic/gin/gin.go:292 (0x4a46d5)
              (*Engine).handleHTTPRequest: context.Next()
      D:/code/src/github.com/gin-gonic/gin/gin.go:273 (0x4a4459)
              (*Engine).ServeHTTP: engine.handleHTTPRequest(c)
      c:/go/src/net/http/server.go:1703 (0x468415)
      c:/go/src/net/http/server.go:1204 (0x466408)
      c:/go/src/runtime/asm_386.s:2287 (0x438ea1)
  </code></pre>