【发布时间】:2023-04-09 12:02:01
【问题描述】:
我用 go 编写了这个小程序。关于go关键字,我只知道当我以这种方式调用一个函数时,是同时执行的。我尝试在没有 time.Sleep() 的情况下执行此代码,但没有生成输出。我需要添加 time.Sleep(1000) 两次。一次。睡眠声明是不够的。为什么?
package main
import (
"fmt"
"time"
)
func doSomething(integer int) {
fmt.Println(integer)
}
func main() {
i := 1
for i <= 10 {
go doSomething(i)
i++
}
time.Sleep(1000)
time.Sleep(1000)
}
【问题讨论】:
-
这是a very good answer,与您的问题基本相同。
-
@JohnCarpenter 只需在 go 操场上运行他的示例。一旦 goroutines 被启动,执行就完成了,因为没有进一步的语句。你如何运行它实际上并不重要。如果它是一个 exe,并且您双击它,则窗口将关闭,如果您打开命令提示符并调用该 exe,则窗口将保持打开状态并移动到下一个提示符。
-
因为调度 goroutine 和调用
fmt.Println(integer)需要超过 1 微秒。 -
@sensorario: 是的,但由您自己协调,无论是使用频道还是同步。WaitGroup
标签: go concurrency