管道快速入门案例|学习笔记

简介: 快速学习管道快速入门案例

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

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


管道快速入门案例

 

内容介绍:

一、定义/声明 channel

二、channel 初始化

三、向 channel 中写入(存放)数据

四、管道的初始化,写入数据到管道,从管道读取数据及基本的注意事项

 

一、定义/声明 channel

var 变量名 chan 数据类型

举例如下:

var  intChan chan int (表示 intChan 用于存放int数据)

var  mapChan chan map[int]string (表示 mapChan 用于存放 map[int]string 类型)

var perChan chan Person(可以放结构体)

var perChan2 chan *Person(可以放结构体的延伸)

说明

1) channel 是引用类型

2)channel 必须初始化才能写入数据,即 make 后才能使用

3)管道是有类型的,intChan 只能写入整数 int

var 变量名称就是管道名,chan 是不能改变的关键字,数据类型表示管道放入什么样类型的数据。

 

二、channel 初始化

说明:使用 make 进行初始化

var intChan chan int

intChan = make(chan int, 10)

说明+示意图

不使用 make 会报错

3代表大小,int 代表类型

 

三、向 channel 中写入(存放)数据

var intChan chan int

intChan = make(chan int, 10)

num := 999

intChan <- 10

intChan <- num

引用类型,写入符、读取符

 

四、管道的初始化,写入数据到管道,从管道读取数据及基本的注意事项:

(1)

package main

import (

"fmt"

)

func  main(){

//演示一下管道的使用

//1.创建一个可以存放3个int类型的管道

var intChan chan int

inichan = make(chan int,3)

//2.看看intchanl是什么

fmt.Printf("intchan的值=%v  intChan)

可以理解为:内存里有一个 Intchan 指向地址(0xc042074080)后,地址再指向channel管道列队(首地址),编译结果如下:

image.png

(2).加入 intchan 本身的地址

fmt.Printf("intchan 的值=%v  intChan 本身的地址=%p\n", intChan, intChan,  &intChan) 后,可以理解为,存地址的空间也有其本身的地址,编译结果如下:

image.png(3).

1 package main

2 import (

3   "fmt"

4  )

5

6  func  main(){

7

8  //演示一下管道的使用

9  //1.创建一个可以存放3个int类型的管道

10   var intChan chan int

11   inichan = make(chan int,3)

12

13   //2.看看intchanl是什么

14  fmt.Printf("intchan的值=%v  intChan本身的地址=%p\n", intChan, intChan,  &intChan)

15  

16  //3. 向管道写入数据

17  

18  intchan<- 10

19  num := 211

20  intChan<- num

21

22  

23 //4.看看管道的长度和cap(容量)

24 fmt.Printf("channel len= %v cap=%v \n",len(intchan),  cap(intChan)) // 2,3

}

长度是2,容量是3,加入了两个数,所以长度为2,容量不会变化,数据最多能加到3,加多了就会发生爆破。

编译结果如下:

image.png

(4)

1 package main

2 import (

3   "fmt"

4  )

5

6  func  main(){

7

8  //演示一下管道的使用

9  //1.创建一个可以存放3个int类型的管道

10   var intChan chan int

11   inichan = make(chan int,3)

12

13   //2.看看intchanl是什么

14  fmt.Printf("intchan的值=%v  intChan本身的地址=%p\n", intChan, intChan,  &intChan)

15  

16  //3. 向管道写入数据

17  

18  intchan<- 10

19  num := 211

20  intChan<- num

21

22  //注意点,当我们给管写入数据时,不能超过其容量

23   intchan<- 50

24   intchan<- 98

25  //4.看看管道的长度和cap(容量)

26 fmt.Printf("channel len= %v cap=%v \n",len(intchan),  cap(intChan)) // 2,3

编译结果如下:

image.png

(5)

1 package main

2 import (

3   "fmt"

4  )

5

6  func  main(){

7

8  //演示一下管道的使用

9  //1.创建一个可以存放3个int类型的管道

10   var intChan chan int

11   inichan = make(chan int,3)

12

13   //2.看看intchanl是什么

14  fmt.Printf("intchan的值=%v  intChan本身的地址=%p\n", intChan, intChan,  &intChan)

15  

16  //3. 向管道写入数据

17  

18  intchan<- 10

19  num := 211

20  intChan<- num

21

22  //注意点,当我们给管写入数据时,不能超过其容量

23   intchan<- 50

24   intchan<- 98

25  //4.看看管道的长度和cap(容量)

26 fmt.Printf("channel len= %v cap=%v \n",len(intchan),  cap(intChan)) // 3,3

27

28  //5.从管道中读取数据

29

30   var num2 int

31  num2  =<-intChan

32  fmt.Print1n( "num2=", num2)

33  fmt.Printf("channel len= %v cap=%v \n",len(intchan),  cap(intChan)) // 2,3

编译结果如下:

image.png

(6).在(5)下加上如下代码:

35  //6.在没有使用协程的情况下,如果我们的管道数据已经全部取出,再取就会报告deadlock

36

37  num3 :=<-intchan

38  num4 :=<-intchan

39  num5:=<-intchan

40  fmt.Print1n( "num3=", num3,"num4=", num4, "num5=", num5)

41

42  }

编译结果如下:

image.png

int 代表类型,3代表大小,先进行声明,注意引用类型,<写入符、-读取符等符号的正确,如果不使用 make 会报错,管道中放入数据需要依次放入,

len 指的是长度,cap 是指容量,容量大小就是 make 的大小,当向管道写入数据时,不能超过其容量,超过会发生报错。管道的价值是一边放,一边取,取完之后还可以继续放入。取出后数据长度减小,但管道容量不会发生变化。

相关文章
|
8月前
|
监控 安全
管道的三种使用方案中,唯一正确而安全的使用方法
管道的三种使用方案中,唯一正确而安全的使用方法
27 0
|
BI 定位技术 Python
SWMM从入门到实践教程 04 快速入门案例的模拟执行
在左侧双击Options中的Dates,即可弹出时间的设置。此处为了教学,建议仅模拟6个小时,加快结果的生成。实际项目中,可以根据需求对指定场次的降雨时常进行模拟,并注意这个时常一定不低于降雨时常(我们的雨量计设置了2小时降雨,所有66个小时的模拟也是合理的)。
|
监控 Dubbo Java
使用场景演示 | 学习笔记
快速学习使用场景演示,介绍了使用场景演示系统机制, 以及在实际应用过程中如何使用。
使用场景演示 | 学习笔记
|
SQL 分布式计算 大数据
连接操作_入门_案例 | 学习笔记
快速学习连接操作_入门_案例
连接操作_入门_案例 | 学习笔记
|
开发者
3.5基础概念: Watches 窗口简介|学习笔记
快速学习3.5基础概念: Watches 窗口简介
3.5基础概念: Watches 窗口简介|学习笔记
|
机器学习/深度学习 SQL 数据采集
阿里云相关产品基本操作演示|学习笔记
快速学习阿里云相关产品基本操作演示
195 0
阿里云相关产品基本操作演示|学习笔记
|
机器学习/深度学习 SQL 数据采集
阿里云机器学习平台PAI基本操作演示|学习笔记
快速学习阿里云机器学习平台PAI基本操作演示
850 0
阿里云机器学习平台PAI基本操作演示|学习笔记
|
安全 网络协议 数据建模
管道基本介绍|学习笔记
快速学习管道基本介绍
管道基本介绍|学习笔记
|
网络协议 程序员 测试技术
管道的注意事项和细节(2)|学习笔记
快速学习管道的注意事项和细节(2),使用 select 可以解决从管道取数据的阻塞问题【案例演示】 我们在管道读取数据的时候要 close 管道,如果没有关闭,这个时候他会阻塞,而且会发生死锁,但有些情况如想在不想关闭的情况下也不被阻塞的话,我们就要使用 select
管道的注意事项和细节(2)|学习笔记
|
开发者 Python
Python脚本编程常见问题学习笔记
快速学习Python脚本编程常见问题