再探channel
不要通过共享内存来通信,而应该通过通信来共享内存
Go从语言层面保证同一个时间只有一个goroutine能够访问channel里面的数据,为开发者提供了一种优雅简单的工具,所以Go的做法就是使用channel来通信,通过通信来传递内存数据,使得内存数据在不同的goroutine中传递,而不是使用共享内存来通信。
package main
import (
"fmt"
)
func main() {
//声明通道
var c chan int
fmt.Println(c) //nil
if c == nil {
c = make(chan int)
fmt.Printf("数据类型是: %T, %p\n", c,c) //chan int 0xc00008c060
}
go func() {
for i:=0;i<10;i++{
time.Sleep(1*time.Second)
//将i发送至通道中
c <- i
}
close(c)
}()
for{
//循环接收通道的返回值
_i,ok := <- c
fmt.Println(_i,ok)
//当通道关闭后 跳出循环
if !ok{
break
}
}
}
最后更新于