Golang笔记

golang 非阻塞使用channel 示例

非阻塞使用channel 示例

package main

import "fmt"

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

    /**
    这里是一个非阻塞 receive。如果在 messages 上的值是可用的,
    那 select 将 <-messages 的值带上,执行 <-messages 下面的println语句。
    如果不是,它将立即带上 default 的值,执行 default 下面的println语句
    **/
    select {
    case msg := <-messages:
        fmt.Println("received message", msg)
    default:
        fmt.Println("no message received")
    }
    /**
    一个非阻塞 send 的类似工作
    **/
    msg := "hi"
    select {
    case messages <- msg:
        fmt.Println("sent message", msg)
    default:
        fmt.Println("no message sent")
    }

    /**
    我们可以用在 default 之上使用多个 cases 来实现一个非阻塞的多路 select。
    在这里我们尝试在 messages 和 signals 上实现非阻塞 receives。
    **/

    select {
    case msg := <-messages:
        fmt.Println("received message", msg)
    case sig := <-signals:
        fmt.Println("received signal", sig)
    default:
        fmt.Println("no activity")
    }
}
本文网址: https://golangnote.com/topic/77.html (转载注明出处)
关于GolangNote:记录在工作中使用golang 遇到、面临的相关问题及解决方法。如果你在这里获得一些知识或信息,解决你的编程问题,请考虑捐赠给不幸的人或者你喜欢的慈善机构,除捐赠外,种植树木、志愿服务或减少排碳的行为也很有益处。如果你有任何问题可以在下面 留言
Be the first to comment!
Captcha image
Relative Articles