select 是Go语言中常用的一个关键字,Linux再也早也引入了这个函数,用来实现非阻塞的一种方式,一个select语句用来选择哪个case中的发送或接收操作可以被立即执行。它类似于switch语句,但是它的case涉及到channel有关的I/O操作。
select{
case case处理语句
case chan2 case处理语句
default:
// 如果上面都没有成功,则进入default处理语句
}
12345678
go有一个特殊的关键字select,它允许用户从多个通道中选择一个通道来接收。
package main
import (
   "fmt"
   "time"
)
func ping1 (c chan string){
   time.Sleep(time.Second*1)
   c "ping on channel1"
}
func ping2 (c chan string){
   time.Sleep(time.Second*2)
   c "ping on channel2"
}
func main(){
   channel1 := make(chan string)
   channel2 := make(chan string)
   go ping1(channel1)
   go ping2(channel2)
   select {
   case msg1 := "received",msg1)
   case msg2 := "received",msg2)
   case "no messages")
   }
}
如果先接收到channel1就先执行channel1分支,如果接收到channel2,就执行channel2分支,如果在规定的时间没有接收到消息,就会执行超时的分支。 程序调用内置的close函数关闭了通道,关闭通道并不会导致通道的机能完全停止,他的作用就是通知其他正在尝试从这个通道接收值的goroutine,这个通道已经不会再接受到任何值了。 case msg, ok1 =
package main
import (
   "fmt"
)
func callerA(c chan string) {
   c "hello world"
   close(c)
}
func callerB(c chan string) {
   c "hello zhangsan"
   close(c)
}
func main() {
   a, b := make(chan string), make(chan string)
   go callerA(a)
   go callerB(b)
   var msg string
   ok1, ok2 := true, true
   for ok1 || ok2 {
       select {
       case msg, ok1 = if ok1 {
               fmt.Printf("%s from A\n", msg)
           }
       case msg, ok2 = if ok2 {
               fmt.Printf("%s from B\n", msg)
           }
       }
   }
}
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

 
		

 微信扫一扫打赏
			    	微信扫一扫打赏
			     支付宝扫一扫打赏
			    	支付宝扫一扫打赏	
			    

.png) 
		        