這個例子取自tour.golang.org/#63package mainimport ( "fmt" "time")func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) }}func main() { go say("world") say("hello")}輸出helloworldhelloworldhelloworldhelloworldhello為什么world只打印4時間而不是5?編輯:答案可以從golang 規范中引用:程序執行首先初始化主包,然后調用函數 main。當函數 main 返回時,程序退出。它不會等待其他(非主)goroutine 完成。
3 回答

慕姐8265434
TA貢獻1813條經驗 獲得超2個贊
當您的主函數結束時,您的程序結束,即所有 goroutine 都終止。您的主要在go say("world")
完成之前終止。如果你在 main 的結尾睡了一段時間,你應該會看到最后一個世界。

互換的青春
TA貢獻1797條經驗 獲得超6個贊
因為調用 gorouting 在您生成的第二個之前終止。這會導致第二個關閉。為了說明,稍微修改您的代碼:
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Print(i)
fmt.Println(":"+s)
}
}
func main() {
go say("world")
say("hello")
}
嘗試將“等待”或睡眠放在主函數的末尾。
- 3 回答
- 0 關注
- 219 瀏覽
添加回答
舉報
0/150
提交
取消