【发布时间】:2018-12-05 17:22:53
【问题描述】:
当我使用 golang 进行一些文件操作时,我首先打开一个文件并将 close() 添加到延迟列表中,然后我尝试重命名该文件。如果我手动关闭文件,延迟将再次关闭它。如果我等待延迟关闭它,重命名将导致错误,因为它没有关闭是的。代码如下
func main() {
pfile1, _ := os.Open("myfile.log")
defer pfile1.Close() //It will be closed again.
...
...
pfile1.Close() //I have to close it before rename it.
os.Rename("myfile.log", "myfile1.log")
}
我找到了一些丑陋的解决方案,例如创建另一个函数来分离打开的文件,下面有没有更好的解决方案?
func main() {
var pfile1 *os.File
ugly_solution(pfile1)
os.Rename("myfile.log", "myfile1.log")
}
func ugly_solution(file *os.File) {
file, _ = os.Open("myfile.log")
defer file.Close()
}
【问题讨论】:
-
为什么你还是把电话推迟到
Close()?如果您必须调用它,您可以将延迟排除在外吗?