golang noblocking send

前端之家收集整理的这篇文章主要介绍了golang noblocking send前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
// Basic sends and receives on channels are blocking.
// However,we can use `select` with a `default` clause to
// implement _non-blocking_ sends,receives,and even
// non-blocking multi-way `select`s.

package main

import "fmt"

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

    // Here's a non-blocking receive. If a value is
    // available on `messages` then `select` will take
    // the `<-messages` `case` with that value. If not
    // it will immediately take the `default` case.
    select {
 case msg := <-messages:
        fmt.Println("received message",msg)
 default:
        fmt.Println("no message received")
    }

    // A non-blocking send works similarly.
    msg := "hi"

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

    // We can use multiple `case`s above the `default`     // clause to implement a multi-way non-blocking
    // select. Here we attempt non-blocking receives
    // on both `messages` and `signals`.
    select {
 case msg := <-messages:
        fmt.Println("received message",msg)
 case sig := <-signals:
        fmt.Println("received signal",sig)
 default:
        fmt.Println("no activity")
    }
}

若messages没有设置buffer size的话,那么messages <- msg是发送不出去的

原文链接:https://www.f2er.com/go/189047.html

猜你在找的Go相关文章