管道的注意事项和细节(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)

 

相关文章
|
3月前
|
缓存 Ubuntu 网络协议
Linux系统编程之文件I/O函数的使用:介绍文件I/O函数的基本概念、用法和实现方式
Linux系统编程之文件I/O函数的使用:介绍文件I/O函数的基本概念、用法和实现方式
72 1
|
3月前
|
JavaScript 前端开发 Java
流的概念,怎么处理
流的概念,怎么处理
|
3月前
|
监控 安全
管道的三种使用方案中,唯一正确而安全的使用方法
管道的三种使用方案中,唯一正确而安全的使用方法
10 0
|
3月前
|
算法 程序员 编译器
【C++ 基础知识 】C++流操纵符全解析:从基础到高级应用
【C++ 基础知识 】C++流操纵符全解析:从基础到高级应用
103 0
|
3月前
|
存储 数据处理 API
【C# 控制台】主要讲述以下C#的部分语法,部分基础,做到了解作用
【C# 控制台】主要讲述以下C#的部分语法,部分基础,做到了解作用
|
前端开发
前端学习笔记202305学习笔记第二十五天-读写流组合使用
前端学习笔记202305学习笔记第二十五天-读写流组合使用
25 0
|
编译器 Scala 开发者
函数使用注意事项和细节2|学习笔记
快速学习函数使用注意事项和细节2。
59 0
|
网络协议 程序员 测试技术
管道的注意事项和细节(2)|学习笔记
快速学习管道的注意事项和细节(2),使用 select 可以解决从管道取数据的阻塞问题【案例演示】 我们在管道读取数据的时候要 close 管道,如果没有关闭,这个时候他会阻塞,而且会发生死锁,但有些情况如想在不想关闭的情况下也不被阻塞的话,我们就要使用 select
94 0
管道的注意事项和细节(2)|学习笔记
|
Scala 开发者
包对象注意事项和细节说明|学习笔记
快速学习包对象注意事项和细节说明。
61 0
包对象注意事项和细节说明|学习笔记
|
编译器 Go 开发者
包使用注意事项和细节(1)|学习笔记
快速学习包使用注意事项和细节(1)
109 0
包使用注意事项和细节(1)|学习笔记