我的功能是具有此签名的工作文件
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
}
出现零指针取消引用错误。是什么原因?
1
1 个回答
1
当您使用命名返回变量时,该变量在函数体内声明,并将初始值设置为零值。因此,在第二个示例中,您使用了命名 return d
, ,d
是一个 nil 指针。你仍然应该初始化它:
d = new(FileMetadata)
0
|
d
设置为指向新分配的FileMetadata
.在第二个示例中,结果d
被初始化为零值(nil 指针)。–
|