range循環會無限在channels上面迭代
package main
import (
"fmt"
"time"
)
func main() {
//創建一個通道
ch := make(chan int)
//開啟一個goroutine
go func() {
//無限循環
for {
//往通道里發送數據
ch <- 1
//睡眠一秒
time.Sleep(time.Second)
}
}()
//無限循環從通道中讀取數據
for i := range ch {
fmt.Println(i)
}
}
和下面的無限讀取是等價的
package main
import (
"fmt"
"time"
)
func main() {
//創建一個通道
ch := make(chan int)
//開啟一個goroutine
go func() {
//無限循環
for {
//往通道里發送數據
ch <- 1
//睡眠一秒
time.Sleep(time.Second)
}
}()
//無限循環從通道中讀取數據
for {
i, ok := <-ch
if !ok {
break
}
fmt.Println(i)
}
}

