当前位置: 首页 > news >正文

网站建设做得好百度登陆页面

网站建设做得好,百度登陆页面,不收费的企业查询网站,新疆生产建设兵团发改委网站使用 Select 如果此时我们有多个 channel,我们想从多个 channel 接收数据,谁来的快先输出谁,此时应该怎么做呢?答案是使用 select: package mainimport "fmt"func main() {var c1, c2 chan int // c1 and …

使用 Select

如果此时我们有多个 channel,我们想从多个 channel 接收数据,谁来的快先输出谁,此时应该怎么做呢?答案是使用 select:

package mainimport "fmt"func main() {var c1, c2 chan int // c1 and c2 == nil//n1 := <-c1//n2 := <-c2// 如果我们想同时从 c1 和 c2 接收数据, 谁来的快// 就先要谁, 此时就需要使用 select 来帮助我们完成上述任务select {case n := <-c1:fmt.Println("Received from c1:", n)case n := <-c2:fmt.Println("Received from c2:", n)default:fmt.Println("No value received")}
}

此时程序执行将会输出 default 的内容。为 select 加上一个无限循环,将会一直输出 default 的内容,但是如果去掉 default,将会报错:
在这里插入图片描述
这个错误在说的是,现在没有协程启动并向 channel 当中发送数据。

现在我们新建一个生产 channel 的工厂函数 generator,在 generator 当中,我们开启一个 goroutine,在 goroutine 当中我们开启一个无限循环,每一次迭代随机 sleep 一定时间,并将不断自增的 i i i输入到 channel 当中:

func generator() chan int {out := make(chan int)go func() {i := 0for {time.Sleep(time.Duration(rand.Intn(1500)) * time.Millisecond)out <- ii++}}()return out
}

此时修改 main 函数为:

func main() {c1, c2 := generator(), generator()//n1 := <-c1//n2 := <-c2// 如果我们想同时从 c1 和 c2 接收数据, 谁来的快// 就先要谁, 此时就需要使用 select 来帮助我们完成上述任务for {select {case n := <-c1:fmt.Println("Received from c1:", n)case n := <-c2:fmt.Println("Received from c2:", n)}}
}

得到的结果如下:

Received from c2: 0
Received from c2: 1
Received from c1: 0
Received from c1: 1
Received from c2: 2
Received from c1: 2
Received from c1: 3
Received from c2: 3
Received from c2: 4
... ...

一个更复杂的使用 select 的例子如下,下面的例子对上述代码进行了修改,加入了定时器,并使用 createWorker 和 worker 不断地开启 goroutine 并向 channel 发送数据:

package mainimport ("fmt""math/rand""time"
)func generator() chan int {out := make(chan int)go func() {i := 0for {time.Sleep(time.Duration(rand.Intn(1500)) * time.Millisecond)out <- ii++}}()return out
}func worker(id int, c chan int) {for n := range c {time.Sleep(time.Second)fmt.Printf("Worker %d received %d\n",id, n)}
}func createWorker(id int) chan<- int {c := make(chan int)go worker(id, c)return c
}func main() {var c1, c2 = generator(), generator()var worker = createWorker(0)var values []inttm := time.After(10 * time.Second)tick := time.Tick(time.Second)for {var activeWorker chan<- intvar activeValue intif len(values) > 0 {activeWorker = workeractiveValue = values[0]}select {case n := <-c1:values = append(values, n)case n := <-c2:values = append(values, n)case activeWorker <- activeValue:values = values[1:]case <-time.After(800 * time.Millisecond):// 如果每两次生成数据之间的时间超过了 800ms:fmt.Println("timeout")case <-tick:fmt.Println("queue len:", len(values))case <-tm:fmt.Println("bye")return}}
}
http://www.ds6.com.cn/news/37582.html

相关文章:

  • 潍坊定制网站搭建建网站公司
  • 网站制作相关知识百度关键词优化有效果吗
  • 陵水网站建设费用数据分析培训
  • 济南seo网站建站建站工具
  • 海拉尔网站建设平台百度商城app下载
  • 品牌建设网站百度收录申请
  • 云南省建设厅官方网站证书在线分析网站
  • 创业邦使用什么网站模板百度快照排名
  • 网站内容有哪些石家庄抖音seo
  • 在日本网站做推广渠道移动端关键词排名优化
  • 做网站一定要公司备案吗东莞市民最新疫情
  • 凡科互动电话seo优化工具大全
  • 用java做视频网站关键词林俊杰mp3
  • 自己网站联系电话修改怎么做郑州有没有厉害的seo顾问
  • 东莞网站设计评价semiconductor是什么意思
  • 深圳微信网站定制啥是网络推广
  • 如何建设网站广州市疫情最新情况
  • 洛阳网站设计外链网站推荐几个
  • 衡水制作网站小程序流量点击推广平台
  • 城乡建设部统计网站讯展网站优化推广
  • app下载做任务赚钱网站武汉seo优化顾问
  • 网站建设需要了解的如何推广微信公众号
  • wordpress国内视频网站网络营销推广策划书
  • 360网站咋做网站流量分析的指标有哪些
  • 怎么建卡盟网站关键词排名查询工具有哪些
  • 临清做网站免费软件下载网站有哪些
  • 北京展示型网站哪些平台可以发布软文
  • 网站建设中忽略的字体违法行为网络优化公司排名
  • wordpress登录非常慢评论优化
  • iis 配置网站 404页面系统优化工具