golang 如何查看channel通道中未读数据的长度

Posted 翔云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 如何查看channel通道中未读数据的长度相关的知识,希望对你有一定的参考价值。

可以通过内建函数len查看channel中元素的个数。

内建函数len的定义如下:

func len(v Type) int The len built-in function returns the length of v, according to its type:
Array: the number of elements in v.数组中元素的个数
Pointer to array: the number of elements in *v (even if v is nil).数组中元素的个数
Slice, or map: the number of elements in v; if v is nil, len(v) is zero.其中元素的个数
String: the number of bytes in v.字节数
Channel: the number of elements queued (unread) in the channel buffer; if v is nil, len(v) is zero.通道中未读数据的个数

下面通过简单例子演示其使用方法。

package main

import "fmt"

func main() {
        c := make(chan int, 100)

        fmt.Println("1.len:", len(c))

        for i := 0; i < 34; i++ {
                c <- 0
        }
        
        fmt.Println("2.len:", len(c))

        <-c

        <-c

        fmt.Println("3.len:", len(c))
}

output:

1.len: 0
2.len: 34
3.len: 32

可以看到,定义之后,没有任何元素时,长度为0。
接着写入34个元素后,长度为34。
最后,读出两个元素后,长度变为32。

参考

https://golang.org/pkg/builtin/#len

以上是关于golang 如何查看channel通道中未读数据的长度的主要内容,如果未能解决你的问题,请参考以下文章

[golang] channel通道

golang协程——通道channel阻塞

mysql中未读消息的数据库设计?

Go语言自学系列 | golang并发变成之通道channel

GoLang协程与通道---上

在 golang 中创建一片缓冲通道