go语言(22)---- range & select

  1. 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....")
}
  1. 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)
}
相关推荐
老猿讲编程27 分钟前
一个例子来说明Ada语言的实时性支持
开发语言·ada
Chrikk1 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*1 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue1 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man1 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang
萧鼎3 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
学地理的小胖砸3 小时前
【一些关于Python的信息和帮助】
开发语言·python
疯一样的码农3 小时前
Python 继承、多态、封装、抽象
开发语言·python
^velpro^3 小时前
数据库连接池的创建
java·开发语言·数据库
秋の花3 小时前
【JAVA基础】Java集合基础
java·开发语言·windows