1. 程式人生 > >[Go] golang的range循環遍歷通道

[Go] golang的range循環遍歷通道

圖片 ann func 發送 一秒 make 無限循環 fmt imp

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)
	}
}

技術分享圖片

  

  

[Go] golang的range循環遍歷通道