go-goroutinesAndChannels

并发执行的操作是一个 goroutine,main 入口应用本身就是一个 goroutine.

goroutine的使用

goroutine 的基本用法十分简洁。

package main

import (
"fmt"
)

func test() {
for i := 0; i < 9; i++ {
fmt.Println("hello")
}
}

func main() {
go test()
}

实际执行的时候会发现看不到输出,因为 goroutine 还没执行 main 函数已经退出了。
Go 程序从初始化 main package 并执行 main() 函数开始,当 main() 函数返回时, 程序退出, 且程序并不等待其他 goroutine( 非主 goroutine)结束。

通过 channel 同步

channel 是 Go 语言在语言级别提供的 goroutine 间的通信方式。 我们可以使用 channel 在两个或多个 goroutine 之间传递消息。

package main

import (
"fmt"
)

func test(done chan bool) {
for i := 0; i < 9; i++ {
fmt.Println("hello")
}
done <- true
}

func main() {
done := make(chan bool)
go test(done)
<-done
}