select 解决从管道中取数据阻塞问题

传统的方法在遍历管道时,如果不关闭会阻塞而导致 deadlock ,在实际开发中我们不好确定在什么时候关闭管道。可以使用 select 方式解决。

/**
 * @Author: v_bivwei
 * @Description:
 * @Date: 2020/1/22 18:03
 */
package main

import (
	"fmt"
)

func main() {
	var intChan = make(chan int, 10)
	for i := 0; i < 10; i++ {
		intChan <- i
	}
	var stringChin = make(chan string, 5)
	for i := 0; i < 5; i++ {
		stringChin <- fmt.Sprintf("stringChin %d", i)
	}
	for {
		select {
		case v := <-intChan:
			fmt.Printf("intChin 读出来的数据为 %d\n", v)
		case v := <-stringChin:
			fmt.Printf("intChin 读出来的数据为 %s\n", v)
		default:
			// 取完了的逻辑
			// ...
			return
		}
	}
}

发布了145 篇原创文章 · 获赞 24 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/xiaobinqt/article/details/104072968