并发concurrency
goroutine的简单易用
并发不是并行
并发主要由切换时间片来实现“”同时“”运行的
package main
import(
“fmt”
“time”
)
func main() {
go GO()
time.Sleep(2 *time.Second)//暂停2秒
}
func Go() {
fmt.Println(“GO GO GO!!!”)
main函数和go函数一起运行
Channel
Channel 阻塞同步的,是goroutine沟通的桥梁
通过make创建,close关闭
Channel是应用类型
可以使用for range 来迭代不断操作channel
可以设置单向或双向通道
可以设置缓存大小
import(
“fmt”
“time”
)
func main() {
c := make (chan bool)
go func(){
fmt.Println(“GO GO GO”)
c< - true
}()
<-c
}
import(
“fmt”
“time”
)
func main() {
c := make (chan bool)
go func(){
fmt.Println(“GO GO GO”)
c< - true
close©
}()
for v := range c {
fmt.Println(v)
}
}
select
可处理一个或多个channel 的发送与接收
同时有多个可用的channel时按随机顺序处理
可用空的select来阻塞main函数
可设置超时