golang select 小结

栏目: Go · 发布时间: 7年前

内容简介:从不同并发执行的协程中,获取数据可以用select来完成。select监听的多个通道,也可以用通道发送数值。1、如果多个通道都阻塞了,会等待知道其中一个通道可以处理。2、如果多个通道都可以处理,随机选取一个处理。

select 介绍

从不同并发执行的协程中,获取数据可以用select来完成。select监听的多个通道,也可以用通道发送数值。

select {
// 接收数据
case u:= <- ch1:
        ...
// 发送数据
case v:= <- ch2:
        ...
        ...
default: // no value ready to be received
        ...
}

select 基本用法

1、如果多个通道都阻塞了,会等待知道其中一个通道可以处理。

2、如果多个通道都可以处理,随机选取一个处理。

3、如果没有通道操作可以操作并且写了default语句,会执行:default(永远是可以运行的)

4、如果防止select堵塞,可以写default来确保发送不被堵塞,没有case的select就会一直堵塞。

5、当select做选择case和default操作时,case的优先级大于default。

6、select语句实现了一种监听模式,通常在无限循环中使用,通过在某种情况下,通过break退出循环。

示例1

package main

import (
    "time"
    "fmt"
)

func doneSelect(ch chan int)  {
    for  {
        fmt.Println("for循环-输出-start")
        select {
        case data := <-ch:
            fmt.Println(data)
            break // 使用break只会跳出select
            //return   使用return会跳出for循环
        default:
            fmt.Println("select default testing")
        }
        fmt.Println("for循环-结束-end")
    }
    fmt.Println("for循环-跳出-end")
}
func do()  {
    ch := make(chan int)
    go doneSelect(ch)
    ch <- 666
}
func main()  {
    do()
    time.Sleep(3*time.Second)
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

跨越鸿沟

跨越鸿沟

[美] 杰弗里·摩尔(Geoffrey A. Moore) / 赵娅 / 机械工业出版社 / 2009-1 / 36.00元

在真正涉足高科技领域之前,你有必要读一读这本书——在这个节奏飞快、竞争激烈的技术竞技场上,这本书绝对能够帮助你更容易地获得成功。 ——威廉姆·劳森 罗盛软件公司董事会主席兼CEO 最近40年来,本书对高科技营销各个方面所做出的贡献远远超过了其他任何相关书籍。如今已经有无数企业和大学分别在自己的运营和教学过程中引入了鸿沟思想,如果你还不是这些企业或大学中的一员,你可能就要担心自己的未来了......一起来看看 《跨越鸿沟》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试