goroutine 疑问?

package main

import (
    "fmt"
)

func say(s string) {
    for i := 0; i < 5; i++ {
        fmt.Println(s)
    }
}

func main() {
    go say("world")
    say("hello")
}

clipboard.png
为什么结果是这样的?

阅读 2.3k
2 个回答

答:

main函数执行完,如果goroutine没执行完,那么不会等待goroutine执行完,整个程序就会直接退出。

所以他们代码都是这样写的

package main
import(
"sync"
"time"
)

func main() {
    var wg sync.WaitGroup
    for i:=0; i<5; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
        }()
print(1)
        time.Sleep(time.Second)
    }
    wg.Wait()
}

1、使用 sync.WaitGroup
2、使用 channel 通信
都能判断

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题