Go:匿名Func仅获取范围内的最后一个值

Go:匿名Func仅获取范围内的最后一个值,go,Go,我想这是一个相当容易的解决办法。只需尝试在字符串列表url中循环,并在循环迭代时打印出每个url。但当我添加go和WaitGroup并发时,它打印出来的只是列表中的最后一个url 为什么在循环迭代时,从anon函数打印时只打印最后一个url,而不是单独打印每个url 前往游乐场: 代码: 以下是工作代码: package main import ( "fmt" "sync" ) var urls = []string{ "http://google.com",

我想这是一个相当容易的解决办法。只需尝试在字符串列表url中循环,并在循环迭代时打印出每个url。但当我添加go和WaitGroup并发时,它打印出来的只是列表中的最后一个url

为什么在循环迭代时,从anon函数打印时只打印最后一个url,而不是单独打印每个url

前往游乐场:

代码:


以下是工作代码:

package main

import (
    "fmt"
    "sync"
)

var urls = []string{
    "http://google.com",
    "http://facebook.com",
    "http://youtube.com",
    "http://yahoo.com",
    "http://baidu.com",
    "http://wikipedia.org",
    "http://twitter.com",
    "http://live.com",
    "http://amazon.com",
    "http://linkedin.com",
    "http://google.co.in",
}

func main() {
    var wg sync.WaitGroup
    for _, url := range urls {
        fmt.Println("correct: " + url)
        wg.Add(1)
        go func(url string) {
            fmt.Println("wrong: " + url)
            wg.Done()
        }(url)
    }

    wg.Wait()
}

同样在运动场:

虽然正确,但这并不是stackoverflow所接受的有用答案,因为它只是指向外部站点的链接。这里的形式是,问题和答案或多或少应该是独立的。
package main

import (
    "fmt"
    "sync"
)

var urls = []string{
    "http://google.com",
    "http://facebook.com",
    "http://youtube.com",
    "http://yahoo.com",
    "http://baidu.com",
    "http://wikipedia.org",
    "http://twitter.com",
    "http://live.com",
    "http://amazon.com",
    "http://linkedin.com",
    "http://google.co.in",
}

func main() {
    var wg sync.WaitGroup
    for _, url := range urls {
        fmt.Println("correct: " + url)
        wg.Add(1)
        go func(url string) {
            fmt.Println("wrong: " + url)
            wg.Done()
        }(url)
    }

    wg.Wait()
}