你可以在写入而不是阻止时使Golang丢弃数据包吗?

时间:2013-10-02 21:32:15

标签: go

给定一个长度为N的通道,我只想在它未满时写入它。否则我将丢弃此数据包并处理下一个数据包。

这在GOlang中是否可行

2 个答案:

答案 0 :(得分:18)

您可以使用select。例如:

package main

func main() {

    ch := make(chan int, 2)

    for i := 0; i < 10; i++ {
        select {
        case ch <- i:
            // process this packet
            println(i)
        default:
            println("full")
            // skip the packet and continue
        }
    }
}

答案 1 :(得分:0)

在我知道的事实之后,但这正是我编写的帮助程序包中OverflowingChannel类型实现的内容。它有效地使用了上面的选择技巧。