如果我错了,请纠正我。据我所知,goroutine 的工作原理与线程大致相似。所以如果我用不同的参数生成相同的函数,前缀为 go。它应该可以正常工作吗?package mainimport "fmt"func f(from string) { for i := 0; i < 3; i++ { fmt.Println(from, ":", i) }}func main() { go f("direct") go f("redirect") //var input string //fmt.Scanln(&input)}实际输出:rahul@g3ck0:~/programs/go$ go run goroutine.go rahul@g3ck0:~/programs/go$ 我刚回来提示。预期输出:direct : 0direct : 1direct : 2redirect : 0redirect : 1redirect : 2不一定按相同的顺序。无法理解这种奇怪的行为。我错过了什么吗?编辑:添加 Scan 语句可以解决它。但是有没有更好的方法呢?
2 回答
慕斯709654
TA贡献1840条经验 获得超5个赞
如上所述,最后的 select{} 确保显示输出,但您不能期望 go 例程以特殊顺序运行。
如果您运行并行 go 例程,则永远无法保证它们将按什么顺序运行。你不能不让它们按顺序运行,因为它们是并行运行的!
您可能会在一台机器上一次又一次地获得预期的输出,但不能保证每次在任何给定机器上都能按顺序打印输出!!
- 2 回答
- 0 关注
- 190 浏览
添加回答
举报
0/150
提交
取消