【发布时间】:2016-03-20 11:35:32
【问题描述】:
我仍在努力学习 Golang 的基础知识。
考虑以下示例代码:
func OpenOutputFile(name string) (fp *os.File) {
fp, err := os.Create(name)
if err != nil {
panic(err)
}
defer func() {
if err := fp.Close(); err != nil {
panic(err)
}
}()
return fp
}
我会假设调用:
fp := OpenOutputFile("output.txt")
现在将 fp 设为文件指针 (*os.File),这样我就可以调用如下语句:
io.WriteString(fp, "Hello World")
在另一个函数中。但是在调用这个方法的时候,却产生了错误:
0 write output.txt: bad file descriptor
所以看来返回的指针是无效的。如何返回格式正确的指针以与io.WriteString 一起使用?
感谢您的帮助!
注意:当文件指针的创建和文件指针的写入存在于同一方法中时,一切都会按预期执行。将逻辑分解为函数会导致其行为不符合预期。
【问题讨论】: