商君

导航

Go Example--通道非阻塞

package main

import (
	"fmt"
)

func main() {
	messages := make(chan string)
	signals := make(chan bool)

	//常规的通过通道发送和接收数据是阻塞的。然而,我们可以使用带一个 default子句的 select 来实现非阻塞 的发送、接收,甚至是非阻塞的多路 select
	select {
	case msg := <-messages:
		fmt.Println(msg)
	default:
		fmt.Println("no message received")
	}

	msg := "hi"
	select {
	case messages <- msg:
		fmt.Println("sent message", msg)
	default:
		fmt.Println("no message sent")
	}

	select {
	case msg := <-messages:
		fmt.Println(msg)
	case sig := <-signals:
		fmt.Println(sig)
	default:
		fmt.Println("no activity")
	}
}

posted on 2018-10-19 15:45  漫步者01  阅读(121)  评论(0编辑  收藏  举报