希曼日记

select

作用

操作channel管道专用, 与Switch语法差不多, 但有区别:

  1. case 参数语句必须是IO操作, 不能是=赋值
  2. secect是随机选择IO操作执行(一般选择执行时间最短的case)

语法:

select {
	case case1: // code 
	case case2: // code 
	default:  // code 
}

例子: 随机对某个channel管道执行

package main

import (
	"fmt"
	"time"
)

func main() {
	chan4 := make(chan int, 10)
	chan5 := make(chan string, 10)

	go intChan(chan4, 12)
	go strChan(chan5, "1231")

	select {
	case v := <-chan4: // 必须是IO操作语句
		fmt.Println(v)
	case v := <-chan5: // 必须是IO操作语句
		fmt.Println(v)
	}
}
func intChan(ch chan int, arg int) {
	time.Sleep(time.Second * 2)
	ch <- arg
}

func strChan(ch chan string, arg string) {
	time.Sleep(time.Second * 4)
	ch <- arg
}