Когда я выполняю какие-то файловые операции с 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()
? Если вам нужно позвонить, вы можете просто оставить отсрочку? - person nemo   schedule 06.03.2016