- range
利用range代替for循环
go
package main
import "fmt"
func main() {
c := make(chan int)
go func() {
for i := 0;i < 5;i++ {
c <- i
}
//close 关闭一个 channel
close(c)
}()
//for {
// //ok 如果为true,表示 channel 没有关闭,如果为false,表示channel已经关闭
// if data,ok := <-c; ok{
// fmt.Println(data)
// } else {
// break
// }
//
//}
//可以使用range来迭代不断操作chnanel
for data := range c {
fmt.Println(data)
}
fmt.Println("Main Finished....")
}

- Select
单流程下一个go只能监控一个channel的状态,select可以完成监控多个channel的状态
go
package main
import "fmt"
func fibonaci(c,quit chan int) {
x,y := 1,1
for {
select {
case c <- x:
//如果c可写,则该case就会进来
x = y
y = x + y
case <-quit:
fmt.Println("quit")
return
}
}
}
func main() {
c := make(chan int)
quit := make(chan int)
//sub go
go func() {
for i := 0;i < 3 ;i++ {
fmt.Print(<-c)
}
quit <- 0
}()
//main go
fibonaci(c,quit)
}
