我有一个简单的goroutine,它调用一个本地二进制文件(rsync),该文件指向一个临时文本文件,该文件包含要操作的文件列表以及目标目录。在例程的最后,我删除了临时文件。这里没有问题。
但是在某些情况下,如果在范围循环中调用了两个目标,则需要使用相同的临时文件,例如:
destDirs := []string{"dir1/", "dir2/"}
for _, dest := range destDirs {
go launchRoutine(tempfile.Name(), dest)
}
由于launchRoutine可能需要一段时间才能运行,并且由于这是一个Web应用程序,因此无法等待例程完成。
问题是,最好在哪里放置os.Remove(tempfile)代码?
选项1-向launchRoutine发送一个切片而不是一个字符串,然后在launchRoutine中对其进行循环,然后删除该文件。
选项2-当范围循环在最后一次迭代时,将bool发送到launchRoutine以删除文件。
选项3-不知道吗?有我没想到的惯用方式吗?
我使用的解决方案,@ RJS的注释似乎可以验证该解决方案:
destDirs := []string{"dir1/", "dir2/"}
for _, dest := range destDirs {
go launchRoutine(tempfile.Name(), dest)
}
os.Remove(tempfile.Name())
谢谢!
答案 0 :(得分:2)
只要我没有误解你的解释:
也许我误会了,但希望我能有所帮助。