为了账号安全,请及时绑定邮箱和手机立即绑定

Golang:恐慌:运行时错误:无效的内存地址或零指针取消引用

Golang:恐慌:运行时错误:无效的内存地址或零指针取消引用

Go
九州编程 2021-09-10 15:35:31
在将文件上传到我的 go 应用程序时,我遇到了恐慌。 panic: runtime error: invalid memory address or nil pointer dereference /Users/bob/Projects/go/src/github.com/zenazn/goji/web/middleware/recoverer.go:24 (0xbaf5b)    func.006: debug.PrintStack() /usr/local/go/src/pkg/runtime/panic.c:248 (0x1043d)    panic: runtime·newstackcall(d->fn, (byte*)d->args, d->siz); /usr/local/go/src/pkg/runtime/panic.c:552 (0x10eed)    panicstring: runtime·panic(err); /usr/local/go/src/pkg/runtime/os_darwin.c:454 (0xfb8e)    sigpanic: runtime·panicstring("invalid memory address or nil pointer dereference"); /usr/local/go/src/pkg/mime/multipart/multipart.go:223 (0xb6801)    (*Reader).NextPart: if r.currentPart != nil { /Users/bob/Projects/go/src/github.com/app/controllers/company_sheet_controller.go:32 (0x2ee18)    NewCompanySheet: part, err := mr.NextPart() /usr/local/go/src/pkg/net/http/server.go:1235 (0x44f00)    HandlerFunc.ServeHTTP: f(w, r) /Users/bob/Projects/go/src/github.com/zenazn/goji/web/router.go:113 (0x6bc0a)此方法处理来自多部分表单的上传,提取文件内容和边界数据。在r.FormFile上请求方法用于设置文件和报头。为了从帖子中提取额外的数据,我使用r.MultipartReader. 从我看到的错误描述r中,已经声明为ParseMultipartForm使用r.FormFile. 当分别使用不同的请求方法执行函数时,我没有收到任何错误。r.FormFile并且r.MultipartReader隔离工作正常。我不能混合使用这两种请求方法吗?func Upload(r *http.Request) {  file, header, err := r.FormFile("file")  ErrorCheck(err)  mr, err := r.MultipartReader()  ErrorCheck(err)  part, err := mr.NextPart()  ErrorCheck(err)  var b bytes.Buffer  io.CopyN(&b, part, int64(1<<20))  fmt.Println(b.String())  defer file.Close()}
查看完整描述

1 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

您在函数的开头调用 FormFile() 。

这会调用 ParseMultipartForm()(请参阅Request.FormFile),它会填充http.Request的 MultipartForm 字段。

现在MultipartReader()的文档指出,如果要将数据作为流处理,则应使用 MultipartReader()而不是ParseMultipartForm()。

如果 MultipartForm 字段已经设置,查看源MultipartReader() 会返回错误。

所以回答你的问题:不,你不能对同一个请求使用这两个函数。

还有你的

defer file.Close()

应该在您检查 FormFile() 的错误后立即关闭,否则当您的函数发生混乱时,该文件不会在垃圾收集之前关闭。


查看完整回答
反对 回复 2021-09-10
  • 1 回答
  • 0 关注
  • 239 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信