我的功能是带有此签名的工作文件
func GetFileMetadata(f *multipart.FileHeader) *FileMetadata {
d := new(FileMetadata)
// ...
if typ, err := GetFileRealType(f); err == nil {
d.Type = typ.MIME.Value
fileExt = "." + typ.Extension
} else {
d.Type = "unknown"
}
return d
}
使用以下签名则不会。
func GetFileMetadata(f *multipart.FileHeader) (d *FileMetadata) {
// ...
if typ, err := GetFileRealType(f); err == nil {
d.Type = typ.MIME.Value
fileExt = "." + typ.Extension
} else {
d.Type = "unknown"
}
return
}
获取零指针取消引用错误。原因是什么?
当您使用命名返回变量时,该变量在函数体内声明,并将初始值设置为零值。因此,在第二个示例中,您使用了带有
d
的命名返回,d
是一个 nil 指针。你仍然应该初始化它:
d = new(FileMetadata)