zoukankan      html  css  js  c++  java
  • Go_select

    select 是 Go 中的一个控制结构。select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。

    select语句的语法结构和switch语句很相似,也有case语句和default语句:

     select {
         case communication clause  :
            statement(s);      
         case communication clause  :
            statement(s); 
         /* 你可以定义任意数量的 case */
         default : /* 可选 */
            statement(s);
     }

    说明:

    • 每个case都必须是一个通信

    • 所有channel表达式都会被求值

    • 所有被发送的表达式都会被求值

    • 如果有多个case都可以运行,select会随机公平地选出一个执行。其他不会执行。

    • 否则:

      如果有default子句,则执行该语句。

      如果没有default字句,select将阻塞,直到某个通信可以运行;Go不会重新对channel或值进行求值。

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
    	/*
    	分支语句:if,switch,select
    	select语句类型于switch语句
    		但是select语句会随机执行一个可运行的case
    		如果没有case可以运行,要看是否有default,如果有就执行default,否则就进入阻塞,直到有case可以运行
    	 */
    	ch1 := make(chan int)
    	ch2 := make(chan int)
    
    	go func() {
    		time.Sleep(3 * time.Second)
    		ch1 <- 100
    	}()
    
    	go func() {
    		time.Sleep(3 * time.Second)
    		ch2 <- 200
    	}()
    
    	select {
    	case num1 := <-ch1:
    		fmt.Println("ch1中获取的数据。。", num1)
    	case num2, ok := <-ch2:
    		if ok {
    			fmt.Println("ch2中读取的数据。。", num2)
    		} else {
    			fmt.Println("ch2通道已经关闭。。")
    		}
    
    	default:
    		fmt.Println("default语句。。。")
    	}
    
    	fmt.Println("main..over...")
    }
    

     

  • 相关阅读:
    python中filter(),map()和reduce()的用法及区别
    Python中的单例模式的几种实现方式的及优化
    python标准库和第三方库的区别
    django和flask的区别
    wtforms
    protobuf学习
    人物FSM
    策略模式
    虚函数调用机制
    虚析构函数
  • 原文地址:https://www.cnblogs.com/yzg-14/p/12254567.html
Copyright © 2011-2022 走看看