【发布时间】:2014-01-07 14:15:33
【问题描述】:
我有以下代码:
dirs, err := get_directories(bucket, start_dir, "")
其中 dirs 是一个字符串数组。在那之后,我正在循环它们:
for _, dir := range dirs {
fmt.Println("le dir",dir)
go func() {
fmt.Println("working on",dir)
get_files(bucket, dir, "")
wg.Done()
}()
}
wg.Wait()
在dirs中,我有["one", "two"],如果看到如下内容:
le dir one
le dir two
working on one
working on one
为什么 gorouting 没有使用正确的 dir 值?
【问题讨论】:
-
我最初认为这是未定义的行为,但循环的每次迭代都会创建一个独立于前一个的新目录。
-
@Tempus 这讨论了 相反 的行为而不是报告的行为(这让我感到困惑) - 在报告的行为中,first 值在关闭。
-
@Tempus - 我被那个 recently 咬了 - 好电话。
-
@user2864740 “很有可能当您运行此代码时,您会看到每次迭代打印的最后一个元素”——关键字是 chance。调度程序可能不会做出您期望的选择,因此它可能会打印两次 first 值,甚至会打印第一个然后是第二个。
标签: go