go语言里select 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)

}

}

}

golang select 为什么要for循环

有数量不定的goroutine往channel里塞东西,然后select来接收并处理。如果所有的goroutine都完成工作,ch也接收完了,那么select就会阻塞。现在我想要跳出死循环,大概是在for循环里设置一些东西,不知道可不可以实现,或者有类似的解决方法。

go func(){ for{ select{ case v:= 《-ch: //这里打左尖括号排版就会乱,不知道是不是网站的bug DoSomething() } } }()

go语言select语句特点

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

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

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

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


当前文章:go语言里select go语言里的数组
文章出自:http://scyanting.com/article/ddegepg.html