Golang与IO多路复用

select

Golang的select关键字,用到了多路复用的概念,当然不是IO多路复用,因为没有涉及到输入输出。先看看下面例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import (
"fmt"
"sync"
)
func main() {
c1:=make(chan int,1)
var i1,i2 int
var count sync.WaitGroup
count.Add(1)
go func() {
defer count.Done()
select {
case i1 = <-c1:
fmt.Println("i1 received from c1\n")
case i2 = <-c1:
fmt.Println("i2 received form c2\n")
}()
c1<-1
count.Wait()
close(c1)
}

Golang的select的一大特性就是case随机选取,所以我们可以看到有时候是运行i1 = <-c1、有的时候是i2 = <-c1


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!