channel和range
package main
import "fmt"
func main() {
c:= make(chan int)
go func() {
for i:=0;i<3;i++{
c<-i
}
// 当不需要再次发送数据后需要关闭channel,如果被关闭可能会引发死锁
close(c)
}()
// range 会阻塞等待
for num := range c{
fmt.Println(num)
}
}
0
1
2
channel和select
package main
import "fmt"
func yield(c,quit chan int) {
temp:=2
for {
select {
case c<-temp:
temp*=2
case <-quit:
return
}
}
}
func main() {
c :=make(chan int)
quit :=make(chan int)
go func() {
for i:=0;i<10;i++ {
fmt.Println(<-c)
}
quit<-0
}()
yield(c,quit)
}
2
4
8
16
32
64
128
256
512
1024