zoukankan      html  css  js  c++  java
  • Select用法

    Select用法

    Go里面提供了一个关键字select,通过select可以监听channel上的数据流动。
    select的用法与switch语言非常类似,由select开始一个新的选择块,每个选择条件由case语句来描述。
    与switch语句相比, select有比较多的限制,其中最大的一条限制就是每个case语句里必须是一个IO操作,大致的结构如下

    select {
        case <-chan1:
            // 如果chan1成功读到数据,则进行该case处理语句
        case chan2 <- 1:
            // 如果成功向chan2写入数据,则进行该case处理语句
        default:
            // 如果上面都没有成功,则进入default处理流程
    }
    

    普通的代码

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func WorkHere(quit chan interface{}) {
    	for {
    		select {
    		case <-quit:
    			fmt.Println("over")
    			return
    		default:
    			time.Sleep(time.Millisecond * 100)
    			fmt.Println("work")
    		}
    	}
    }
    
    func main() {
    	var (
    		quit chan interface{}
    	)
    	quit = make(chan interface{})
    	go WorkHere(quit)
    	time.Sleep(2 * time.Second)
    	quit<- "quit"
    }
    
    # 输出
    work
    work
    ..........此处省略一万字
    work
    work
    over
    

    小结

    用法: 参考 switch case 语句。 但!case后面必须是IO操作,不可以任意写判别表达式。
    
    注意事项:
        1. 监听的case中,没有满足监听条件,阻塞。
    
        2. 监听的case中,有多个满足监听条件,任选一个执行。
    
        3. 可以使用default来处理所有case都不满足监听条件的状况。 通常不用(会产生忙轮询)
    
        4. select 自身不带有循环机制,需借助外层 for 来循环监听
    
        5. break 跳出 select中的一个case选项 。类似于switch中的用法。
    
  • 相关阅读:
    SDP(12): MongoDB-Engine
    SDP(11):MongoDB-Engine功能实现
    SDP(10):文本式大数据运算环境-MongoDB-Engine功能设计
    React Native(五)——获取设备信息react-native-device-info
    React Native(四)——顶部以及底部导航栏实现方式
    去掉a标签
    React Native(三)——推送jpush-react-native
    react native (一)
    《JavaScript 秘密花园》
    正则表达式(overall)
  • 原文地址:https://www.cnblogs.com/maomaomaoge/p/14129698.html
Copyright © 2011-2022 走看看