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”,或扫描下方二维码进行关注,更多干货等着你 !