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

有没有办法将 for 循环作为 go 例程运行而不将其放在单独的 func 中

有没有办法将 for 循环作为 go 例程运行而不将其放在单独的 func 中

Go
四季花海 2021-06-22 17:12:01
假设我想设置一个for循环运行但不想阻塞执行,显然我可以将for循环放在一个函数中f并调用go f并继续我的生活,但我很好奇是否有go for直接调用的方法, 就像是:fmt.Println("We are doing something")//line below is my questiongo for i := 1; i < 10; i ++ {    fmt.Println("stuff running in background")} // life goes onfmt.Println("c'est la vie")
查看完整描述

2 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

如果要在后台运行每个循环,请将 goroutine 嵌套在循环中并使用该sync.WaitGroup结构。


import "sync"


fmt.Println("We are doing something")


//line below is my question

wg := sync.WaitGroup{}


// Ensure all routines finish before returning

defer wg.Wait()


for i := 1; i < 10; i ++ {

    wg.Add(1)

    go func() {

        defer wg.Done()

        fmt.Println("stuff running in background")

    }()

}


// life goes on

fmt.Println("c'est la vie")


查看完整回答
反对 回复 2021-06-28
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

做到这一点的唯一方法确实是围绕它创建一个函数。在您的示例中,这就是您的操作方式。


fmt.Println("We are doing something")

//line below is my question

go func() {

    for i := 1; i < 10; i ++ {

        fmt.Println("stuff running in background")

    } 

}()

// life goes on

fmt.Println("c'est la vie")

记下最后对函数的实际调用}()。否则编译器会向你抱怨。


查看完整回答
反对 回复 2021-06-28
  • 2 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

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