管道的关闭和遍历|学习笔记

简介: 快速学习管道的关闭和遍历

开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:管道的关闭和遍历】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/626/detail/9756


管道的关闭和遍历

 

内容介绍

一、读写 channel 课堂练习//课后练习

二、channel 的遍历和关闭

三、channel 遍历和关闭的案例演示

 

一、读写 channel 课堂练习//课后练习

说明:请完成如下案例

1)创建一个 Person 结构体 [Name,Age,Address]

2)使用 rand 方法配合随机创建10个 Person实例,并放入到 channel 中.

3)遍历 channel ,将各个 Person 实例的信息显示在终端...

 

二、channel 的遍历和关闭

1、channel 的关闭

使用内置函数 close 可以关闭 channel,当 channel 关闭后,就不能再向 channel 写数据了,但是仍然可以从该 channel 读取数据。

列举案例:

1 package main

2 import (

3 "fmt"

4  )

5

6 func main() {

7

8  intchan := make(chan int,3)

9 intchan<- 100

10 intchan<- 200

11 close(intchan)  //close

12 //这时不能够再写入数据到channe1

13 //intchan<- 300

14 fmt.Print1n( "okook~")

15 //当管道关闭后,读取数据是可以的

16 n1 := <-intchan

17 fmt.Println"n1=", n1)

18  }

close 函数:

内建函数 close 关闭管道,该管道必须为双向的或只发送的,它应当只由发送者执行,而不应由接收者执行,其效果是在最后发送的值被接收后停止该通道。在最后的值从已关闭的管道中被接收后,任何对其的接收操作都会无阻塞的成功。对于已关闭的信道,语句∶

x, ok := <-c

还会将 ok 置为 false。

Channel 的关闭可以解决实际问题,解决前面的问题,channel 关闭后,就不能继续写入数据,但是仍可以从其中读取数据

2、channel 的遍历

channel 支持 for--range 的方式进行遍历,请注意两个细节:

1)在遍历时,如果 channel 没有关闭,则会出现 deadlock 的错误

2)在遍历时,如果 channel 已经关闭,则会正常遍历数据,遍历完后,就会退出遍历。

 

三、channel 遍历和关闭的案例演示

看代码演示:

//遍历管道

intchan2 := make(chan int, 100)

for i := 0; i< 100; i++ {

intchan2<- i*2//放入100个数据到管道

}

//遍历管道不能使用普通的 for 循环

/ / for i:= 0; i< len( intchan2); i++ {

// }

//在遍历时,如果 channel 没有关闭,则会出现 deadlock 的错误

//在遍历时,如果 channel 已经关闭,则会正常遍历数据,遍历完后,就会退出遍历close(intChan2)

for v := range intchan2 {

fmt.Print1n("v=", v)

}

应用实例1

请完成 goroutine 和 channel 协同工作的案例,具体要求:

1)开启一个 writeData 协程向管道 intChan 中写入50个整数.

2)开启一个 readData 协程,从管道 intChan 中读取 writeData 写入的数据。

3)注意: writeData 和 readDate 操作的是同一个管道

4)主线程需要等待 writeData 和 readDate 协程都完成工作才能退出

 

相关文章
|
4月前
|
数据采集 大数据 数据安全/隐私保护
Python编程:如何有效等待套接字的读取与关闭
Python网络编程中,套接字事件处理至关重要。利用`selectors`模块和代理IP能增强程序的稳定性和可靠性。代码示例展示了如何通过代理连接目标服务器,注册套接字的读写事件并高效处理。在代理IP配置、连接创建、事件循环及回调函数中,实现了数据收发与连接管理,有效应对网络爬虫或聊天应用的需求,同时保护了真实IP。
Python编程:如何有效等待套接字的读取与关闭
|
6月前
|
存储 文件存储
<文件操作> 文件的打开与关闭,顺序读写,随机读写,二进制文件,读取结束的判定,文件缓冲区
<文件操作> 文件的打开与关闭,顺序读写,随机读写,二进制文件,读取结束的判定,文件缓冲区
41 1
Stream流操作-简单结果终止方法
Stream流操作-简单结果终止方法
114 0
|
Java 程序员
Stream流操作-结果收集终止方法-最终篇
Stream流操作-结果收集终止方法-最终篇
106 0
|
6月前
|
容器
这个错误是因为在读取文件时,管道已经结束
【1月更文挑战第14天】【1月更文挑战第67篇】这个错误是因为在读取文件时,管道已经结束
106 4
|
6月前
|
Linux Shell
使用输入输出重定向与管道命令——管道
使用输入输出重定向与管道命令——管道。
50 0
Stream流操作-结果收集终止方法-第一篇
Stream流操作-结果收集终止方法-第一篇
77 3
54 # 可写流基本用法
54 # 可写流基本用法
28 0
|
存储 缓存 安全
PHP的passthru() 函数:执行一个命令,并将输出直接发送到输出缓冲区,缓冲区是干什么的?为什么要发送到缓冲区?
PHP的passthru() 函数:执行一个命令,并将输出直接发送到输出缓冲区,缓冲区是干什么的?为什么要发送到缓冲区?
334 0