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

原文地址:https://www.cnblogs.com/lanyangsh/p/9800133.html

时间: 2024-08-07 22:31:04

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

[golang] channel通道

说明 channel是go当中的一个核心类型,可以看做是管道.并发核心单元可以通过channel进行数据的发送和接收,从而实现通信. 在go中,channel是一种数据类型,主要被用来解决协程的同步问题以及协程之间数据共享(数据传递)的问题. go当中的goroutine运行在相同的地址空间,因此访问共享内存地址必须做好同步,goroutine奉行通过通信来共享内存,而不是共享内存来通信. 引用类型channel可用于多个goroutine通讯,在其内部实现了同步,确保并发安全. 定义chann

java nio之 channel通道(二)

java nio 通道上一篇文章里就讲述过,channel总是写数据的时候,要先把数据写入到bytebuffer,读数据的时候总是要先从channel中读入到bytebuffer.如下图,这个图是好多知名博客常用的图,很好理解这个channel. channel分为一下几种: FileChannel SocketChannel ServerSocketChannel DatagramChannel FileChannel: 经常说的FileChannel都是拿下面的例子说事 代码如下: pack

1014-31-首页12-显示weibo未读数--后台运行---定时器

/** *  当app进入后台时调用 */- (void)applicationDidEnterBackground:(UIApplication *)application{    /**     *  app的状态     *  1.死亡状态:没有打开app     *  2.前台运行状态     *  3.后台暂停状态:停止一切动画.定时器.多媒体.联网操作,很难再作其他操作     *  4.后台运行状态     */    // 向操作系统申请后台运行的资格,能维持多久,是不确定的  

新浪微博客户端(21)-获取当前微博未读数并提示用户

HomeViewController.m - (void)viewDidLoad { [super viewDidLoad]; // 初始化NavigationItem [self initNavigationItem]; // 初始化TitleView [self initTitleView]; // 更新TitleView 显示名称 [self updateTitleViewDisplayName]; // 集成下拉刷新控件 [self setupPullToRefreshView]; //

关于 Android 中未公开的类(用@hide隐藏的类)

关于 Android 中未公开的类(用@hide隐藏的类) 摘自:http://wangsheng2008love.blog.163.com/blog/static/78201689201142643413482/ 如果你查看过Android的源代码,会发现源码中有很多类都有@hide的标志,那么这个标志代表什么呢? 其实这表示这些类不会出现在公开的SDK中. 那么在开发应用程序时如何才能用到这些hide的类呢?如果用到这种类,有两种办法,1.把你的应用放在android源码树下编译.可以直接i

检测局域网中未使用的IP地址

临时检测局域网中未使用的IP地址 #!/bin/bash echo "检测局域网中未使用的IP地址2015" echo ""     processbar() {         local current=$1; local total=$2;         local maxlen=80; local barlen=66; local perclen=14;         local format="%-${barlen}s%$((maxlen-b

JAVA NIO(二)Channel通道

Channel概述 Channel是一个通道,可以通过它读取和写入数据,通道与流的不同之处在于通道是双向的,流是单向的:NIO中通过channel封装了对数据源的操作,通过channel 我们可以操作数据源,但又不必关心数据源的具体物理结构.在大多数应用中,channel与文件描述符或者socket是一一对应的.Channel用于在字节缓冲区和位于通道另一侧的实体(通常是一个文件或套接字)之间有效地传输数据.channel中所有数据都通过 Buffer 对象来处理.您永远不会将字节直接写入通道中

golang的缓冲channel简单使用

目录 golang的缓冲channel简单使用 阻塞型 非阻塞 golang的缓冲channel简单使用 我们常用的是无缓冲channel : make(chan type) 其实make() 创建chan的第二个参数可设置缓冲channel的大小. 上述语句等价于 make(chan type, 1) 即创建了一个缓冲区大小为1channel 下面看有缓冲channel的两个例子. 阻塞型 demo : 协程1 :每隔1s 往有10个缓冲的channel里面写一条msg, 协程2:每隔3s 取

查看MYSQL数据库中所有用户及拥有权限

查看MYSQL数据库中所有用户 mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; 查看数据库中具体某个用户的权限mysql> show grants for 'cactiuser'@'%';