golang select 小结

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

内容简介:从不同并发执行的协程中,获取数据可以用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)
}

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

查看所有标签

猜你喜欢:

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

Producing Masculinity

Producing Masculinity

Michele White / Routledge / 2019-3 / $39.95

Thoughtful, witty, and illuminating, in this book Michele White explores the ways normative masculinity is associated with computers and the Internet and is a commonly enacted online gender practice. ......一起来看看 《Producing Masculinity》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

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

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具