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)
}
相关推荐
Java小白笔记4 小时前
Java 实现 ZIP 压缩包生成方案
java·开发语言·网络·7-zip
Persistent的粽子!4 小时前
C++:类与对象(一)
开发语言·c++·经验分享·笔记
weixin_440730505 小时前
使用pytest中方法控制执行步骤(test_begin.py、test_end.py,@pytest.mark.run(order=1))
开发语言·python·pytest
geovindu5 小时前
CSharp: Command Pattern
开发语言·后端·c#·.net·.netcore·命令模式·行为模式
心易行者6 小时前
Python自动化测试7步落地法:用python在线运行省掉90%环境配置时间
java·开发语言·人工智能·python·log4j·ai编程
tedcloud1236 小时前
OpenLogi 怎么搭建?用 Rust 打造一个轻量的 Logitech 外设管理工具
linux·运维·服务器·开发语言·后端·rust·开源
Tanjia_kiki6 小时前
谷歌浏览器中F12编辑并重发请求
开发语言·前端·javascript
程序猿编码6 小时前
基于GGML的C++17轻量化语音推理引擎:说话人识别与语音分析技术全解析
开发语言·c++·pytorch·深度学习·神经网络·大模型
学长毕业设计7 小时前
基于SpringBoot的健康食谱管理系统的设计与实现(源码+文档+讲解视频)
java·spring boot·后端
传奇开心果编程7 小时前
【Rust入门知识点学与练】第5课:函数
开发语言·学习·rust