我想这是一个非常简单的修复方法。只需尝试循环遍历字符串列表urls
并在循环迭代时打印出每个url
。但是当我添加并发(使用go
和WaitGroup
)时,所有打印输出的都是列表中的最后一个url
。
为什么在循环迭代时只打印出最后一个url
(从anon函数打印时)而不是每个url
?
去游乐场:http://play.golang.org/p/z4IZLY7Mt_
代码:
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() {
fmt.Println("wrong: " + url)
wg.Done()
}()
}
wg.Wait()
}
答案 0 :(得分:0)
以下是工作代码:
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()
}