认识goroutine
//goroutine 是一个普通的函数,只是需要使用关键字 go 作为开头。
ready("Tea", 2) ///← 普通函数调用
go ready("Tea", 2) //← ready() 作为 goroutine 运行
package main
import (
"fmt"
"time"
)
func ready(w string , sec int ) {
time.Sleep(time.Duration(sec) * time.Second)
fmt.Println(w, "is ready ! ")
}
func main() {
go ready("Tea", 2) //启动了 goroutine
go ready("Coffee", 1) //启动了 goroutine
fmt.Println("I'm waiting")
//如果不等待 goroutine 的执行,程序立刻终止,而任何正在执行
// 的 goroutine 都 会停止
time.Sleep(5 * time.Second) //等待5秒,等待goroutine退出
}
// I'm waiting //← 立刻
// Coffee is ready ! ///← 1 秒后
// Tea is ready ! //← 2 秒后
为了解决上述问题,需要一些能够同 goroutine 通讯的机制。这一机制通过 channels 的形式使用
//必须使用 make 创建 channel
ci := make ( chan int ) //创建 channel ci 用于发送和接收整数
cs := make ( chan string )//创建 channel cs 用于字符串
cf := make ( chan interface {} )//channel cf使用了空接口来满足各种类型
//向 channel 发送或接收数据
ci <− 1 //← 发送 整数 1 到 channel ci
<− ci //← 从 channel ci 接收 整数
i := <− //ci ← 从 channel ci 接收 整数,并保存到 i 中