我正在尝试为基于 GIN 框架的基于 Go 的 Web 应用程序添加验证。在网页上,我正在选择一个文件并提交,服务器正在处理它。在服务器端,我尝试添加验证以检查文件是否已提供。如果没有,则重定向回原始页面。 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 }即使在提供处理之后,我也会在 go 代码中感到恐慌。请让我知道我在实施中遗漏了什么。谢谢。 http: no such file File is nil. http: no such file ***** 2015/08/04 13:19:10 Panic recovery -> 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()
2 回答
饮歌长啸
TA贡献1951条经验 获得超3个赞
我知道我在panic处理上犯了错误。如果我在 c.HTML 之后添加 return 语句,则验证有效。这将阻止函数执行其余代码。感谢@AlexAtNet 的建议,我将来会牢记在心。
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.",
})
return
}
- 2 回答
- 0 关注
- 303 浏览
添加回答
举报
0/150
提交
取消