func GetCha(cha <-chan int) { //这里参数用了一个单向通道 只允许接收
for{
if v,ok := <-cha; ok{
fmt.Println(v)
}
}
//cha <- 2 这里会发生编译错误
}
func main() {
cha := make(chan int,3)
lock := make(chan struct{},1) //用通道做互斥锁
go func() {
defer func() {
close(cha) //关闭通道
lock <- struct{}{} //空结构不占用内存
}()
index := 1
for{
cha <- index
index += 1
time.Sleep(time.Second)
}
}()
go GetCha(cha)
<-lock
}