管道的注意事项和细节(1)|学习笔记

简介: 快速学习管道的注意事项和细节(1)

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

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


管道的注意事项和细节(1)

 

内容介绍

一、 channel 可以声明为只读,或者只写性质【案例演示】

二、 只读只写的最佳实践案例

 

一、channel 可以声明为只读,或者只写性质【案例演示】

讲解:举个例子,新建一个文件 channel 的一个细节,命名为 channeldetails,新建一个案例 demo01,直接写文件 main.go,将通用代码放入

Package main

Import (

“fmt”

)

Func main()  {

//管道可以声明为只读或者只写

//1.在默认情况下,管道是双向的,既可读又可写

//Var  chan1  chan  int  //可读可写

//2.声明为只写

Var  chan2  chan<-  int

讲解:这种情况下,只能往里面写,不能读。举个例子,make 一个空间,chan<-表示它只有写的类型

Chan2 = make(chan int,3)

Chan2<-20

// num := <-chan2//error

fmt.println(“chan2=”,chan2)

讲解:这样表示他有用,出来是一个地址,要记住加上 num

//3.声明为只读

Var chan3 <-chan int

讲解:这种表示只能读不能写

Num2 := <-chan3

//Chan3<- 30//错误

讲解:这种写法是错的,代码会提示

Fmt.println(“num2”,num2)

}  


二、只读只写的最佳实践案例

1. 案例1

func main() {

var ch chan int

讲解:是一个双向管道

ch = make(chan int, 10)

exitchan := make(chan struct{}, 2)

讲解:定义一个退出管道

go send(ch, exitchan)

go recv(ch, exitchan)

讲解:编写协程,send、 recv,一个发,一个接,ch这个为只写,表达方式为ch chan<- int, Func send(ch chan<- int,exitchan chan struct{})这种方法能有效防止出错。而且读写在底层也做了一个优化,效率更高,是最标准的写法。但是要注意管道在这里是只写的。如果要只读则为(ch <-chan int,exitchan chan struct{})

var total

for = range exitchan {

total+

if total == 2 {

break}}

fmt.Println("结束....")}

2. 案例2

// ch chan<-int ,这样ch就只能写操作了

func send(ch chan<- int, exitchan chan struct{})

for i := e; i <10; i++ {

ch <- i}

close(ch)

var a struct{} exitchan<-a

3. 案例3

// ch chan<-int ,这样 ch 就只能写操作了

func send(ch chan<- int, exitchan chan struct{})

for i := e; i <10; i++ {

ch <- i}

close(ch)

var a struct{} exitchan<-a

讲解:它们的管道类型都是 chan int,只读只写是他们的一种属性。

本节重点如下图:

package main import(

"fmt"

func main() {

//管道可以声明为只读或者只写

//1,在默认情况下下,管道是双向//var chan1 chan int //可读可写

//2声明为只写

var chan2 chan<- int

chan2 = make(chan int, 3) chan2<-20

//num :=<-chan2 //error

fmt.Println("chan2=",chan2)

//3.声明为只读

var chan3 <-chan int num2:=<-chan3

//chan3<-30 //err

fmt.Println("num2",num2)

 

相关文章
|
6月前
|
缓存 Ubuntu 网络协议
Linux系统编程之文件I/O函数的使用:介绍文件I/O函数的基本概念、用法和实现方式
Linux系统编程之文件I/O函数的使用:介绍文件I/O函数的基本概念、用法和实现方式
105 1
|
6月前
|
监控 安全
管道的三种使用方案中,唯一正确而安全的使用方法
管道的三种使用方案中,唯一正确而安全的使用方法
20 0
|
编译器 Scala 开发者
函数使用注意事项和细节2|学习笔记
快速学习函数使用注意事项和细节2。
|
网络协议 程序员 测试技术
管道的注意事项和细节(2)|学习笔记
快速学习管道的注意事项和细节(2),使用 select 可以解决从管道取数据的阻塞问题【案例演示】 我们在管道读取数据的时候要 close 管道,如果没有关闭,这个时候他会阻塞,而且会发生死锁,但有些情况如想在不想关闭的情况下也不被阻塞的话,我们就要使用 select
管道的注意事项和细节(2)|学习笔记
|
Scala 开发者
包对象注意事项和细节说明|学习笔记
快速学习包对象注意事项和细节说明。
包对象注意事项和细节说明|学习笔记
|
编译器 Go 开发者
包使用注意事项和细节(1)|学习笔记
快速学习包使用注意事项和细节(1)
包使用注意事项和细节(1)|学习笔记
|
存储 程序员 Go
切片注意事项和细节(2) | 学习笔记
简介:快速学习切片注意事项和细节(2)
139 0
切片注意事项和细节(2) | 学习笔记
|
Go 开发者
切片注意事项和细节(1) | 学习笔记
简介:快速学习切片注意事项和细节(1)
124 0
切片注意事项和细节(1) | 学习笔记
|
Go vr&ar 开发者
切片注意事项和细节(3) | 学习笔记
简介:快速学习切片注意事项和细节(3)
切片注意事项和细节(3) | 学习笔记
|
网络协议 测试技术 Go
协程配合管道的综合案例 | 学习笔记
快速学习协程配合管道的综合案例
协程配合管道的综合案例 | 学习笔记
下一篇
无影云桌面