介绍select代码之前先简要概述一下通道(先声明后初始化,先进先出)
通道的长度决定了通道可以存放多少个数据(后面会详细介绍,这里就是为了理解select语句)
通道声明:
只有一个位置的int型通道
var a chanint
a =make(chanint,1)
有101个位置的int型通道
var b chanint
b =make(chanint,101)
通道使用:
存数据 a<-10(将10存进了通道a内)
取数据 i:=<-a(将a内的10取出放在变量i内)
1、测试随机性
测试select语句执行case条件的随机性,其中b是一个通道
for i :=0; i <10; i++{select{case b <- i:
fmt.Println("1号就绪!")case b <- i:
fmt.Println("2号就绪!")case b <- i:
fmt.Println("3号就绪!")case b <- i:
fmt.Println("4号就绪!")case b <- i:
fmt.Println("5号就绪!")case b <- i:
fmt.Println("6号就绪!")case b <- i:
fmt.Println("7号就绪!")case b <- i:
fmt.Println("8号就绪!")case b <- i:
fmt.Println("9号就绪!")}}
结果(随机打印):
6号就绪!8号就绪!7号就绪!2号就绪!9号就绪!8号就绪!9号就绪!1号就绪!6号就绪!5号就绪!
2、测试可满足条件
开始通道a内没有数据,取数据时阻塞所以第一个条件不满足
必须先向a输入数据i才可以对a进行取值,所以先打印 投递成功!
又因为a是只能存放一个数据的通道,所以当a内有数据时打印i的值。
for i :=0; i <10; i++{select{case x :=<-a:
fmt.Println(x)case a <- i:
fmt.Println("投递成功!")}}
结果:
投递成功!0
投递成功!2
投递成功!4
投递成功!6
投递成功!8