Go学习笔记六(并发编程)

来源:互联网 发布:网络购物英文翻译 编辑:程序博客网 时间:2024/04/29 16:30

  • 认识goroutine

认识goroutine

//goroutine 是一个普通的函数,只是需要使用关键字 go 作为开头。ready("Tea", 2) ///← 普通函数调用go ready("Tea", 2) //← ready() 作为 goroutine 运行
package mainimport (    "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 创建 channelci := 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 中
0 0
原创粉丝点击