- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我刚开始使用 go 并编写了我的第一个程序,但输出结果不如预期。我写了一个异步例程 addUrl,它将 url 添加到 channel 5000 次,然后 consumeUrl 从 channel 中删除并打印它。该例程仅运行 9 次。为什么?下面是代码和输出
package main
import "fmt"
import "time"
var urlCount = 0
func main(){
urlHolder := make(chan string,5000)
fmt.Printf("Starting program")
go addUrls(urlHolder)
time.Sleep(time.Millisecond * 100)
go consumeUrls(urlHolder)
fmt.Printf("Done")
}
func addUrls(urlHolder chan string){
var myurl string = "https://example.com/"
for i:=0; i<5000 ; i++ {
urlHolder<-myurl
fmt.Printf(" %d url added \n",i)
time.Sleep(time.Millisecond * 10)
}
}
func consumeUrls(urlHolder chan string) {
urlCount++
urlsConsumed := <- urlHolder
fmt.Printf("Pulled url %d",urlCount," ",urlsConsumed,"\n")
time.Sleep(time.Millisecond * 20)
}
输出是
Starting program
0 url added
1 url added
2 url added
3 url added
4 url added
5 url added
6 url added
7 url added
8 url added
Done
为什么当循环为 5000 时它会在 8 点终止?
最佳答案
您正在使用 time.Sleep
等待 main
完成,但您确实应该使用 WaitGroups。
这样您就不必尝试任意选择一些时间并希望它足以让您的程序完成,或者担心设置太多时间而您的程序无所事事。
我已将 WaitGroups 的实现添加到您的代码中:
此外,您的 consumeUrls
函数的编写方式没有正确循环,您无法打印 channel 中的所有内容。但由于这不是您的具体问题,我不会在这里解决。
关于Golang 例程提前终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40315686/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!