网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

go语言中default,go语言中文社区

在go语言中select关键字怎么用?

select 语句使得一个 goroutine 在多个通讯操作上等待。

创新互联建站凭借在网站建设、网站推广领域领先的技术能力和多年的行业经验,为客户提供超值的营销型网站建设服务,我们始终认为:好的营销型网站就是好的业务员。我们已成功为企业单位、个人等客户提供了网站制作、做网站服务,以良好的商业信誉,完善的服务及深厚的技术力量处于同行领先地位。

select 会阻塞,直到条件分支中的某个可以继续执行,这时就会执行那个条件分支。当多个都准备好的时候,会随机选择一个。

复制代码代码如下:

package main

import "fmt"

func fibonacci(c, quit chan int) {

x, y := 1, 1

for {

select {

case c - x:

x, y = y, x + y

case -quit:

fmt.Println("quit")

return

}

}

}

func main() {

c := make(chan int)

quit := make(chan int)

go func() {

for i := 0; i 10; i++ {

fmt.Println(-c)

}

quit - 0

}()

fibonacci(c, quit)

}

默认选择

当 select 中的其他条件分支都没有准备好的时候,default 分支会被执行。

为了非阻塞的发送或者接收,可使用 default 分支:

select {

case i := -c:

// use i

default:

// receiving from c would block

}

复制代码代码如下:

package main

import (

"fmt"

"time"

)

func main() {

tick := time.Tick(1e8)

boom := time.After(5e8)

for {

select {

case -tick:

fmt.Println("tick.")

case -boom:

fmt.Println("BOOM!")

return

default:

fmt.Println(" .")

time.Sleep(5e7)

}

}

}

go语言select语句特点

1 select语句的每个case语句必须IO操作

2 执行 case 语句顺序是随机的

3 select的每个case(包含default)语句是阻塞的

4 如果case语句均发生阻塞,那么执行default语句

go语言select的作用

Go里面提供了一个关键字select,通过select可以监听channel上的数据流动。

select的用法与switch语言非常类似,由select开始一个新的选择块,每个选择条件由case语句来描述。

与switch语句相比, select有比较多的限制,其中最大的一条限制就是每个case语句里必须是一个IO操作,大致的结构如下:

在一个select语句中,Go语言会按顺序从头至尾评估每一个发送和接收的语句。

如果其中的任意一语句可以继续执行(即没有被阻塞),那么就从那些可以执行的语句中任意选择一条来使用。

如果没有任意一条语句可以执行(即所有的通道都被阻塞),那么有两种可能的情况:

如果给出了default语句,那么就会执行default语句,同时程序的执行会从select语句后的语句中恢复。

如果没有default语句,那么select语句将被阻塞,直到至少有一个通信可以进行下去

有时候会出现goroutine阻塞的情况,那么我们如何避免整个程序进入阻塞的情况呢?我们可以利用select来设置超时,通过如下的方式实现:

select总结:

作用: 用来监听 channel 上的数据流动方向。 读?写?

select实现fibonacci数列:


新闻名称:go语言中default,go语言中文社区
浏览地址:http://bjjierui.cn/article/dsshpio.html

其他资讯