5.21 go selectの概要

/*
  Go里面提供了一个关键字select,通过select可以监听channel上的数据流动
  selec的用法与switch语言非常类似,由select开始一个新的选择快,每个选
  择条件由case语句来描述。
  但是select的每个case语句必须是一个IO操作。

  select结构
  select{
  case <-chan1:
       //如果channel成功读到数据,则进行该case处理与语句
  case chan2<-:
       //如果成功向chan2写入数据,则进行该case处理语句
  default:
       //如果上面没有成功,则进入default处理语句(需要考虑资源消耗)
      
  }   
  
  !!!在一个select语句中,Go语言会按照顺序从头到尾评估每一个发送和接收
的语句。如果其中任意一语句可以继续执行(即没有被阻塞),那么就那些可以执行的
语句中任意选择一条来使用。

  下面是一个通过select实现菲波那切数列的例子

*/
package main

import "fmt"
//通过select实现菲波那切数列(fibonacci)
func fibonacci(ch chan<-int,quit <-chan bool){
	x,y:=1,1
	for{
		//监听ch的数据流动
		select{
		case ch<-x:
			  x,y=y,x+y
		case flag:=<-quit:
		     if flag{
				fmt.Println("是否结束:",flag)
				return
			}
		}
		
	}
	
	
	
}
func main(){
	//数字通信
	ch:=make(chan int)
	//程序是否结束
	quit:=make(chan bool)
	//消费者,从ch读取内容
	go func(){//新建协程
		for i:=0;i<8;i++{
			num:=<-ch;
			fmt.Println(num)
		}
		//可以停止
		quit<-true
		
	}()//别忘了()
	//生产者,产生数字,写入channel
	fibonacci(ch,quit)
	
	
}

 

145の元の記事を公開 115のような 50,000以上の訪問

おすすめ

転載: blog.csdn.net/h4241778/article/details/105476505