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
从该通道里接收的值一直都是类型零值
作业
-
编写一个流水线部件(一个goroutine),他需要记住前面出现的所有值,并且只有在值之前从未出现过的情况下才会将值传递至流水线的下一个阶段。假定第一个值永远不是空字符串。
-
编写一个流水线部件,它接收字符串并将它们拆分成单词,然后向流水线的下一阶段一个接一个的发送这些单词。
可以使用strings.Fields函数