dongnunai3125
2016-09-13 16:14
浏览 187
已采纳

Golang匿名函数循环-值作为参数传递的问题

I had read various pages such as https://github.com/golang/go/wiki/CommonMistakes which outlined the issues with using closures and goroutines in a loop. As such I wrote my original loops as follows:

for outstanding < threads {
    ttl += 1;
    outstanding += 1;
    go func (ttl int, results chan Result) {
        results <- pw.SendTTL(ttl, dest)
        results <- pw.Recv(3)
    }(ttl, results)
}

Passing the changing TTL as an argument to the anonymous function. I ended up getting a random assortment of values over the range. Say if I was expecting 1-5 I'd get a couple 1's, a couple 3's, maybe a 4.

So I tried the following, in case there was something about specifically using the variable instantiated by the loop. Yes I know I'm sort of abusing the for loop here...

for i := ttl; outstanding < threads; i++ {
    go func (ttl int, results chan Result) {
        results <- pw.SendTTL(ttl, dest)
        results <- pw.Recv(3)
    }(i, results)
    outstanding++;
}

No joy. Same experience.

I also tried the other suggested option where you use a local variable in the loop, and use that within the closure. Same experience.

What am I doing wrong here? What boat did I miss?

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题