golang学习笔记——go流水线示例

range与数组、切片、集合

Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。

for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:

for key, value := range oldMap {
    newMap[key] = value
}

go流水线

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

优化

  • Go允许在没有值可供发送的情况下通过close函数关闭通道
    • 例如close(c)
  • 通道被关闭后无法写入任何值,如果尝试写入将引发panic
  • 尝试读取被关闭的通道会获得与通道类型对应的零值。
  • 注意:如果循环里读取一个已关闭的通道,并没检查通道是否关闭,那么该循环可能会一直运转下去,耗费大量CPU时间
  • 执行以下代码可得知通道是否被关闭
v, ok := <-c

修改

在这里插入图片描述
在这里插入图片描述

range与通道(channel)

用range优化
在这里插入图片描述

当通过通道发送有限的数据时,我们可以通过close函数关闭通道来告知从该通道接收值的goroutine停止等待。
当通道被关闭时,往该通道发送值会引发panic
从该通道里接收的值一直都是类型零值

作业

  1. 编写一个流水线部件(一个goroutine),他需要记住前面出现的所有值,并且只有在值之前从未出现过的情况下才会将值传递至流水线的下一个阶段。假定第一个值永远不是空字符串。

  2. 编写一个流水线部件,它接收字符串并将它们拆分成单词,然后向流水线的下一阶段一个接一个的发送这些单词。
    可以使用strings.Fields函数

相关推荐

  1. golang学习笔记——go互斥锁

    2023-12-11 08:02:02       40 阅读
  2. Golang学习笔记01

    2023-12-11 08:02:02       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-11 08:02:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-11 08:02:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-11 08:02:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-11 08:02:02       18 阅读

热门阅读

  1. python tkinter 使用(三)

    2023-12-11 08:02:02       36 阅读
  2. docker---数据卷

    2023-12-11 08:02:02       39 阅读
  3. 多数元素算法(leetcode第169题)

    2023-12-11 08:02:02       32 阅读
  4. OpenGL 着色器程序的保存和加载(二进制)

    2023-12-11 08:02:02       40 阅读
  5. QList 方法

    2023-12-11 08:02:02       30 阅读
  6. 雪花算法:分布式系统的关键艺术

    2023-12-11 08:02:02       38 阅读
  7. 《C++20设计模式》---原型模式学习笔记代码

    2023-12-11 08:02:02       33 阅读