package main import "fmt" /* 管道Channel是goroutine间的通讯方式,可以使用channel在多个goroutine之间传递消息 golang的并发模型是CSP,提倡通过通信共享内存,而不是通过共享内存实现通信 1.管道的类型,是引用数据类型 2.如果创建管道的时候没有指定容量,那么这个管道就是无缓冲的管道,由称为阻塞管道 3.如果管道满了,你还往管道存储数据,会报deadlock错 4.在没有使用协程的情况下,如果我们的管道数据已经全部取出,再取就会报deadlock错, */ func main() { // 创建管道 ch:= make(chan int, 3) // 给管道里存数据 ch<-10 ch<-20 ch<-30 //从管道里取值 a:=<- ch fmt.Println(a) //10 <-ch c:=<-ch fmt.Println(c) //30 fmt.Printf("值:%v 容量:%v 长度:%v\n", ch, cap(ch),len(ch)) //值:0x820238000 容量:3 长度:0 //使用for range遍历管道,当管道被关闭的时候就会退出for range,如果没有关闭管道就会报错 //all goroutines are asleep - deadlock! var ch1 = make(chan int ,10) for i:=1;i<=10;i++{ ch1<-i } close(ch1) //关闭管道 //注意管道没有key for v := range ch1{ fmt.Println(v) } //注意:通过for循环遍历管道可以不关闭管道,for range遍历必须关闭,否则报错 var ch2 = make(chan int ,10) for i:=1;i<=10;i++{ ch2<-i } // close(ch1) //关闭管道 for i:=1;i<=10;i++{ fmt.Println(<-ch2) } }
package main import "fmt" import "sync" import "time" /* goroutine结合channel协同工作,定义两个方法,一个方法给管道写数据,一个从管道里读数据 管道是安全的:如果一个管道读取数据的速度比写入数据的速度快,读取不会报错 */ var wg sync.WaitGroup func fn1(ch chan int){ for i:=1;i<=10;i++{ ch<-i fmt.Printf("写入数据%v成功\n", i) time.Sleep(time.Millisecond*10) //为了看出交替执行的效果 } close(ch) wg.Done() } func fn2(ch chan int){ for v := range ch{ fmt.Printf("读取数据%v成功\n", v) time.Sleep(time.Millisecond*10) //为了看出交替执行的效果 } wg.Done() } func main() { var ch = make(chan int, 10) wg.Add(1) go fn2(ch) wg.Add(1) go fn1(ch) wg.Wait() }
相关推荐
论Go语言中goroutine的使用
Go语言之goroutine协程详解.md
今天来学习Go语言的Goroutine机制,这也可能是Go语言最为吸引人的特性了,理解它对于掌握Go语言大有裨益,话不多说开始吧! 通过本文你将了解到以下内容: 什么是协程以及横向对比优势 Go语言的Goroutine机制底层...
Go 程序从 main 包的 main() 函数开始,在程序启动时,Go 程序就会为 main() 函数创建一个默认的 goroutine。1) 格式为一个普通
如此多的goroutine是Go运行时来调度的。Go运行时会把goroutine的任务分配给CPU去执行。**注意**,goroutine不是我们通常理解的线程,线程是操作系统调度的。 * Go编程里不需要自己在代码里写线程和协程,想让某个...
go语言中文教程及手册. Go 编程语言是一个使得程序员更加有效率的开源项目。Go 是有表达力、简洁、清晰和有效率的。它的并行机制使其很容易编写多核和网络应用,而新ᓆ的类型系统允许构建有ᧄ性的模块化程序。Go编译...
Go的goroutine并发机制使Go非常适合用于大规模高并发后端服务程序的开发。 Go语言具有接近C/C++的性能和接近python的生产力。在腾讯,一部分现有的C++开发人员正逐渐向Go转型,Tars作为广泛使用的RPC框架,现已支持...
学习 Go 语言(Golang),简单易懂的Go语言教程,让你分分钟学会GO语言
学习 goroutine 背后的复杂性,以及Go语言的运行时如何将所有东西连接在一起。 作者简介 · · · · · · Katherine Cox-Buday是一名计算机科学家,目前工作于 Simple online banking。她的业余爱好包括软件工程...
Go语言有时候被描述为“C类似语言”,或者是“21世纪的C语言”。Go从C语言继承了相似的表达式语 法、控制流结构、基础数据类型、调用参数传值、指针等很多思想,还有C语言一直所看中的编译后机器 码的运行效率以及和...
01 Go语言基础(一)02 Go语言基础(二)03 GO名库讲解 04 Go语言实战开发一个WEB项目博客系统05 Go语言深度讲解(推荐 2018年1月更新)06 Go语言快速入门(2018年2月更新)07 Go语言协程流量统计(2018年3月更新)08...
golang GO语言开发工具golang GO语言开发工具golang GO语言开发工具golang GO语言开发工具golang GO语言开发工具golang GO语言开发工具golang GO语言开发工具golang GO语言开发工具golang GO语言开发工具golang GO...
Go语言学习笔记.pdf 共174页
Goroutine是建立在线程之上的轻量级的抽象。它允许我们以非常低的代价在同一个地址空间中并行地执行多个函数或者方法,这篇文章主要介绍了Go语言学习之goroutine的相关知识,需要的朋友可以参考下
中下载适合你系统的Go语言包,选择 .msi 安装包下载即可。 安装 Go 语言包 双击下载的安装包,按照提示进行安装。 配置环境变量 在环境变量中添加 Go 语言的路径,如 C:\Go\bin。这样,你就可以在任意目录下运行 ...
Go语言核心编程.
go语言编程,Go语言程序设计(英文版),学习 Go 语言(Golang),golang-china读书笔记
3. Go语言中的goroutine是什么?请说明在Go中的goroutine特性和用途。 4. Go语言中的通道(Channel)是什么?请说明在Go中通道的概念和使用方法。 5. Go语言的包管理器是什么?请说明在Go中的包管理器特点和使用方式...
go语言学习的相关资源,有pdf格式和kindle专用格式mobi,资料包含:go语言程序设计、学习Go语言(Golang)、Go语言圣经、Go语言实战、golang Web开发
Go语言底层原理剖析.pdf