如果我錯了,請糾正我。只要我知道,goroutine的作品大致類似於線程。所以,如果我用不同的參數產生相同的功能前綴與去。它應該工作得很好嗎?奇怪的Goroutines行爲
package main
import "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)
}
實際輸出:
[email protected]:~/programs/go$ go run goroutine.go
[email protected]:~/programs/go$
我剛剛回來的提示。
預期輸出:
direct : 0
direct : 1
direct : 2
redirect : 0
redirect : 1
redirect : 2
以相同的順序不一定。
無法理解這種奇怪的行爲。我錯過了什麼嗎?
編輯:添加掃描語句解決它。但是有沒有更好的方法來做到這一點?
加入select {}看起來像一個黑客。我得到以下結果:所有goroutines都睡着了 - 僵局! 夠程1選擇(無例)]: main.main() \t /home/rahul/programs/go/goroutine.go:15 + 0x53 夠程2 [系統調用]: 由runtime.main 創建\t /build/buildd/golang-1/src/pkg/runtime/proc.c:221 退出狀態2 – Rahul
是的,'select {}'是一個黑客。但是顯示問題。正如我在答覆中所述,使用併發類型(例如頻道或同步包中的某個內容)是處理此問題的正確方法。 –
現在這一切都有道理。感謝斯蒂芬! – Rahul