當我使用golang進行一些文件操作時,首先打開一個文件並將close()添加到defer列表中,然後嘗試重命名該文件。如果我手動關閉文件,則延遲將再次關閉。如果我等待延遲關閉它,重命名將會導致錯誤,因爲它沒有關閉。代碼如下在golang中重命名文件之前關閉文件
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()
}
你爲什麼推遲調用'關閉()'呢?如果你必須打電話給你,你可以讓推遲出去? – nemo