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

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

查看所有标签

猜你喜欢:

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

.net之美

.net之美

张子阳 / 机械工业出版社 / 2014-1-1 / 79

本书是.NET 程序员进阶修炼的必读之作,由拥有多年开发经验的资深.NET 技术专家对C# 和.NET 中实用的、关键的和难以理解的知识点进行了深入解析,旨在帮助读者在尽可能短的时间内以 尽可能低的学习成本去掌握那些最应该被掌握的知识。书中的每个知识点都辅之以精心设计的案例,易 于理解,实践性强。 全书共17 章,分为两个部分:第一部分(1~5 章)主要讲解了C# 语言中的一些关键知识点,如......一起来看看 《.net之美》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

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

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换