一、goroutine
使用go语句可以开启一个新的运行期线程,即goroutine,以一个不同的、新创建的goroutine来执行一个函数,同一个程序中所有的goroutine共享同一个地址空间
实例如下:
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")
say("hello")
}
运行结果:
以上是两个goroutine在执行,没有先后顺序
二、通道channel
通道(channel)是用来传递数据的一个数据结构。
通道可用于两个 goroutine 之间通过传递一个指定类型的值来同步运行和通讯。操作符 <-
用于指定通道的方向,发送或接收。如果未指定方向,则为双向通道。
如:
ch <- v // 把 v 发送到通道 ch v := <-ch // 从 ch 接收数据