如果我錯了,請糾正我。據我所知,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 例程,則永遠無法保證它們將按什么順序運行。你不能不讓它們按順序運行,因為它們是并行運行的!
您可能會在一臺機器上一次又一次地獲得預期的輸出,但不能保證每次在任何給定機器上都能按順序打印輸出?。?/p>
- 2 回答
- 0 關注
- 215 瀏覽
添加回答
舉報
0/150
提交
取消