我正在學習 Golang,并且很難理解為什么即使我兩次呼叫該函式,每次呼叫 10 次,它也沒有列印出 20 個問候語。
package main
import (
"log"
"math/rand"
"time"
)
func SayGreetings(greeting string, times int) {
for i := 0; i < times; i {
log.Println(greeting)
d := time.Second * time.Duration(rand.Intn(5)) / 2
time.Sleep(d) // sleep for 0 to 2.5 seconds
}
}
func main() {
rand.Seed(time.Now().UnixNano())
log.SetFlags(0)
go SayGreetings("hi!", 10)
go SayGreetings("hello!", 10)
time.Sleep(2 * time.Second)
}
uj5u.com熱心網友回復:
很簡單的解釋。您使用 go 關鍵字呼叫SayGreetings了兩次,這會導致 SayGreetings 函式同時執行兩次。最后,您不必等到兩個功能都完成!您的代碼在呼叫這兩個函式后僅等待 2 秒,每個函式等待超過 2 秒。所以你要么增加main中的等待時間,要么等到兩個函式都完成
您的問題類似于等待并發作業人員在退出之前完成
uj5u.com熱心網友回復:
- 增加睡眠時間到
time.Sleep(20 *time.Second)主
package main
import (
"log"
"math/rand"
"time"
)
func SayGreetings(greeting string, times int) {
for i := 0; i < times; i {
log.Println(greeting)
d := time.Second * time.Duration(rand.Intn(5)) / 2
time.Sleep(d) // sleep for 0 to 2.5 seconds
}
}
func main() {
rand.Seed(time.Now().UnixNano())
log.SetFlags(0)
go SayGreetings("hi!", 10)
go SayGreetings("hello!", 10)
time.Sleep(20 * time.Second)
}
Output:
======
hi!
hi!
hello!
hello!
hi!
hello!
hi!
hello!
hello!
hi!
hello!
hi!
hi!
hello!
hello!
hello!
hi!
hello!
hi!
hi!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/512041.html
標籤:去
