goroutine
在Go中,并发任务称为goroutine。其他编程语言有一个类似的概念,叫作线程,但是goroutine比线程需要更少的计算机内存
go 函数()
每个Go程序的main函数都是使 用goroutine启动的
goroutine无法接收函数的返回值
1 | package main |
channel
channel可以在不同goroutine传递消息
每个channel只携带特定类型的值
创建channel需要调用内置的make函数
1 | var myChannel chan int |
使用channel发送和接收值
- 发送
myChannel <- value
- 接收
value <- myChannel
1 | package main |
默认情况下发送方会阻塞当前goroutine,直到发送的值被接收;接收方也会阻塞当前goroutine,直到channel被接收
所以跨goroutine要保证channel有发就有收,并且要按收发的顺序来,避免出现死锁
1 | package main |