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)
}
相关推荐
小灰灰搞电子几秒前
Qt 重写QRadioButton实现动态radioButton源码分享
开发语言·qt·命令模式
by__csdn7 分钟前
Vue3 setup()函数终极攻略:从入门到精通
开发语言·前端·javascript·vue.js·性能优化·typescript·ecmascript
喵了meme16 分钟前
C语言实战5
c语言·开发语言
盖世英雄酱5813630 分钟前
springboot 项目 从jdk 8 升级到jdk21 会面临哪些问题
java·后端
廋到被风吹走41 分钟前
【Java】常用设计模式及应用场景详解
java·开发语言·设计模式
Sammyyyyy1 小时前
DeepSeek v3.2 正式发布,对标 GPT-5
开发语言·人工智能·gpt·算法·servbay
Luna-player1 小时前
在前端中,<a> 标签的 href=“javascript:;“ 这个是什么意思
开发语言·前端·javascript
小草cys1 小时前
项目7-七彩天气app任务7.4.2“关于”弹窗
开发语言·前端·javascript
程序猿DD1 小时前
JUnit 5 中的 @ClassTemplate 实战指南
java·后端
小鸡吃米…1 小时前
Python PyQt6教程三-菜单与工具栏
开发语言·python