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)
}

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

查看所有标签

猜你喜欢:

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

另一个地球

另一个地球

[美]马克·格雷厄姆、威廉·H·达顿 / 胡泳、徐嫩羽 / 电子工业出版社 / 2015-10-1 / 78

互联网在日常工作和生活中扮演日益重要的角色,互联网将如何重塑社会?本书通过汇集有关互联网文化、经济、政治角色等问题的研究成果,提供了特定社会制度背景下解决这一问题的根本办法。 关于互联网的研究是蓬勃发展的崭新领域,牛津大学互联网研究院(OII)作为创新型的跨学科学院,自成立起就专注于互联网研究。牛津大学互联网研究院关于互联网+社会的系列讲座在一定程度上塑造了互联网+社会。本书内容基于不同学科......一起来看看 《另一个地球》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

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

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具