管道(channel)select

select功能:解决多个管道的选择问题,也可以叫多路复用,可以从多个管道中随机公平的选择一个来执行

case后面必须进行的是io操作,不能是等值,随机去选择一个io操作

default防止select被阻塞,加入default

只要有其中一个满足条件,就执行相应的逻辑,一般会写个for,里面加入select进行监听多个channel,如果有数据就执行对应的逻辑操作

package main

import (
	"fmt"
	"time"
)

func main() {
	//定义一个int管道:
	intChan := make(chan int, 1)
	go func() {
		time.Sleep(time.Second * 5)
		intChan <- 10
	}()
	//定义一个string管道
	stringChan := make(chan string, 1)
	go func() {
		time.Sleep(time.Second * 10)
		stringChan <- "golang"
	}()

	//fmt.Println(<-intChan) //本身取数据就是阻塞的

	select {
	case v := <-intChan:
		fmt.Println("intChan:", v)
	case v := <-stringChan:
		fmt.Println("stringChan:", v)
	default:
		fmt.Println("防止select被阻塞")

	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值