亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么這不會打印出 20 條問候語?

為什么這不會打印出 20 條問候語?

Go
慕俠2389804 2023-02-21 17:02:03
我正在學習 Golang,我正在努力理解為什么即使我調用該函數兩次,每次調用 10 次,也沒有打印出 20 條問候語。package mainimport (    "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)}
查看完整描述

2 回答

?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

解釋起來很簡單。您SayGreetings使用 go 關鍵字調用兩次,這會導致 SayGreetings 函數的兩次并發執行。最后,您不必等到兩個功能都完成!您的代碼在調用兩個函數后只等待 2 秒,每個函數等待超過兩秒。所以你要么增加 main 的等待時間,要么等到兩個函數都完成



查看完整回答
反對 回復 2023-02-21
?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

將睡眠時間增加到 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!



查看完整回答
反對 回復 2023-02-21
  • 2 回答
  • 0 關注
  • 94 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號