我正尝试在go协程中切换到x目录。现在,我想使用另一个go协程将工作目录更改为y目录。这个第二个go协程对第一个go协程的执行会产生影响吗?希望能够在做类似任务时引入并行性。如果它确实改变了工作目录,那么应该采用什么替代方法(分叉...)?
我正尝试在go协程中切换到x目录。现在,我想使用另一个go协程将工作目录更改为y目录。这个第二个go协程对第一个go协程的执行会产生影响吗?希望能够在做类似任务时引入并行性。如果它确实改变了工作目录,那么应该采用什么替代方法(分叉...)?
如评论中所述,在每个goroutine中跟踪当前工作目录会导致问题。
尝试使用filepath.Abs来捕获绝对目录并存储它。然后,每个goroutine可以在自己的目录上操作,而不必担心在幕后被“切换”。只需确保没有多个goroutine意外修改同一文件。
编辑:根据@Evan的评论删除了一大段文本。请使用绝对路径 :p
os.Chdir
,如果操作系统支持它(我相信所有支持的操作系统都支持),则已实现。如果有的话,您可以使用它。 - JimB跟踪绝对路径名。这是明确的,清晰的,甚至可以在协程之间工作,而不需要任何同步。因此,它更简单,更容易测试和调试。
os.Chdir
函数,它可以在支持更改进程工作目录的任何平台上实现。如果有这个函数,使用它就不是问题。 - JimB