为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这不会打印出 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 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信