我花了一晚上的时间研究如何解决这个错误,但我没有成功。当我运行程序时,出现以下错误:“所有 goroutine 都处于睡眠状态 - 死锁!”。我明白这是因为主程序在例程有可能完成其任务之前退出,我认为使用 sync.WaitGroup 会有所帮助,但实际上并非如此:/我想设置一些例程并使用通道发送 url 以检查 http 状态代码。我想限制对网站的并发调用次数。我已经按照示例使用 string 而不是 struct 做同样的事情并且它起作用了。任何帮助将不胜感激:)package mainimport ( "fmt" "sync" "time")const ( numPollers = 2 // number of Poller goroutines to launch)var urls = []string{ "http://www.google.com/", "http://golang.org/", "http://blog.golang.org/", "http://golangtutorials.blogspot.fr", "https://gobyexample.com/",}// Resource represents an HTTP URL to be polled by this program.type Resource struct { url string}func Poller(in <-chan *Resource, wg *sync.WaitGroup) { //defer wg.Done() for r := range in { fmt.Printf("Finished: %v - %v\n", r.url, time.Now()) } wg.Done()}func main() { var wg sync.WaitGroup pending := make(chan *Resource) wg.Add(len(urls)) go Poller(pending, &wg) go func() { for _, url := range urls { wg.Add(1) fmt.Println("SENT > Pending url " + url) pending <- &Resource{url: url} } }() wg.Wait() fmt.Printf("Finished all goroutines: %v\n", time.Now())}https://play.golang.org/p/B-HSiDo2Qg
2 回答
- 2 回答
- 0 关注
- 184 浏览
添加回答
举报
0/150
提交
取消