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)
}
相关推荐
点云SLAM13 分钟前
C++创建文件夹和文件夹下相关操作
开发语言·c++·算法
2301_8091774718 分钟前
2025.01.15python商业数据分析
开发语言·python
_小柏_33 分钟前
C/C++基础知识复习(46)
c语言·开发语言·c++
SomeB1oody39 分钟前
【Rust自学】6.4. 简单的控制流-if let
开发语言·前端·rust
明月逐人归46439 分钟前
输出语句及变量定义
开发语言·python
从种子到参天大树1 小时前
SpringBoot源码阅读系列(一):启动流程概述
后端
m0_748254881 小时前
Spring Boot实现多数据源连接和切换
spring boot·后端·oracle
tatasix1 小时前
Go Redis实现排行榜
开发语言·redis·golang
吴冰_hogan1 小时前
Java虚拟机(JVM)的类加载器与双亲委派机制
java·开发语言·jvm
菜鸟xiaowang1 小时前
Android.bp java_library_static srcs配置
开发语言·python