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?

In writing out the requested example I think I realized what my problem was. The various go routines were clobbering each others TTL settings when attempting to share the socket.

Question withdrawn ;)

Edit: To clarify, the right value was in fact being passed to the routines in either case. It was an underlying sharing of resources that was the problem.