简单并发

时间:2018-06-08 16:03:15

标签: go concurrency

有人可以解释一下这是如何运作的:

package main

import (
    "fmt"
    "time"
)

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

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

但是一旦我在主

中添加单词go to the routine,这就不起作用了
package main

import (
    "fmt"
    "time"
)

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

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

我认为这是因为它在执行goroutine之前完成了。

1 个答案:

答案 0 :(得分:3)

“世界”goroutine没有运行或完成,因为主要退货和程序退出。

  

当该函数调用返回时,程序退出。它不等待其他(非主要)goroutines完成。    https://golang.org/ref/spec#Program_execution