Если вы довольны вызовом os.Exec, возможно, вы не возражаете против кроссплатформенных проблем.Некоторое время назад было некоторое обсуждение этого вопроса github .
Этот код работает для меня, чтобы все равно получить измененное время.Не уверен, как / если это будет работать в Windows:
file, err := os.Open("test")
if err != nil {
panic(err)
}
stat, err := file.Stat()
sys := stat.Sys().(*syscall.Stat_t)
changedTime := time.Unix(sys.Ctim.Unix())
fmt.Println(stat.ModTime())
fmt.Println(changedTime)
Когда я запускаю
mv test test1 && mv test1 test && go run main.go
Это дает мне:
2018-11-12 17:31:38.659095951 +0000 GMT
2018-11-12 17:57:43.042208583 +0000 GMT
Что, кажется, правильноотражает время, когда я изменил имя, а не время создания (как в первой дате)