`

go语言goroutine的管道channel(三)

    博客分类:
  • Go
阅读更多
package main

import "fmt"
import "time"
//单向管道
func main() {

	//默认情况下管道是双向的,可读可写
	ch:= make(chan int, 3)
//	给管道里存数据
	ch<-10
	ch<-20
	ch<-30
    //从管道里取值
	<-ch

    //单向管道,只写

	ch2 := make(chan<- int, 3)
	ch2<-10

	//单向管道,只读

	ch3 := make(<-chan int, 3)
	<-ch3


	//某些场景下需要同时从多个通道接收数据,这个时候可以使用golang中提供的select多路复用

    // 一个整型管道
	intChan := make(chan int, 10)
	for i:=1;i<=10;i++{
		intChan<-i
	}
    //一个字符串管道
	stringChan := make(chan string, 10)
	for i:=1;i<=10;i++{
		stringChan<- "hello"+fmt.Sprintf("%d", i)
	}

	//注意:使用select来读取channel里面的数据的时候不需要关闭channel
	for{
		select {
		case v:= <-intChan:
			fmt.Printf("从intChan读取数据%d\n", v)
			time.Sleep(time.Millisecond*50)
		case v:= <-stringChan:
			fmt.Printf("从stringChan读取数据%v\n", v)
			time.Sleep(time.Millisecond*50)
		default:
			fmt.Println("read finish")
			return
		}
	}


}

 

分享到:
评论

相关推荐

    Go语言协程goroutine和管道channel教程.PDF

    如此多的goroutine是Go运行时来调度的。Go运行时会把goroutine的任务分配给CPU去执行。**注意**,goroutine不是我们通常理解的线程,线程是操作系统调度的。 * Go编程里不需要自己在代码里写线程和协程,想让某个...

    Go基础--goroutine和channel

    Go基础--goroutine和channel

    Go语言的管道Channel用法实例

    本文实例讲述了Go语言的管道Channel用法。分享给大家供大家参考。具体分析如下: channel 是有类型的管道,可以用 channel 操作符 &lt;- 对其发送或者接收值。 ch &lt;- v // 将 v 送入 channel ch。 v := &lt;-ch /...

    Go语言技术参考手册 中文PDF版

    《Go语言技术参考手册》将会从最基础的概念讲起,同时也会讨论一些类似在应用 goroutine 和 channel 时有多少种不同的模式,如何在 Go 语言中使用谷歌 API,如何操作内存,如何在 Go 语言中进行程序测试和如何使用...

    【文件夹】Go语言并发之道.pdf

    学习 goroutine 背后的复杂性,以及Go语言的运行时如何将所有东西连接在一起。 作者简介 · · · · · · Katherine Cox-Buday是一名计算机科学家,目前工作于 Simple online banking。她的业余爱好包括软件工程...

    Go语言高级编程详细学习资料与配套代码

    Go语言中的并发机制非常强大,可以利用goroutine和channel实现高效的并发编程。资源包含代码示例、配套工具和实验项目等内容。要使用这些代码,你需要安装Go语言开发环境,并按照仓库文档中的说明进行操作。

    关于Go编程语言的一些常见基础面试题.pdf

    4. Go语言中的通道(Channel)是什么?请说明在Go中通道的概念和使用方法。 5. Go语言的包管理器是什么?请说明在Go中的包管理器特点和使用方式。 6. 什么是Go中的函数(Function)?请说明在Go中函数定义和调用方法...

    Go语言实现BBS网站开发代码实现可做毕业设计项目

    2. **并发支持**:Go通过goroutine和channel实现并发编程,使并发代码编写变得简单而高效,有效利用多核处理器和资源。 3. **垃圾回收**:Go具有自动垃圾回收机制,开发者不需要过多关注内存管理,提高了开发效率。...

    Go 语言编程 + Go 学习笔记

    Go 语言编程 + Go 学习笔记, 第 部分 语 第 1 章 类型 1.1 变量 1.2 常量 1.3 基本类型 1.4 引 类型 1.5 类型转换 1.6 字符串 1.7 指针 1.8 定义类型 第 2 章 表达式 2.1 保留字 2.2 运算符 2.3 初始化 2.4 控制流 ...

    wuzhc#zcnote#go的goroutine泄露1

    goroutine泄露主要有两种方式:- channel错误使用危害goroutine泄露,导致它引用的内存不能被回收,进而导致内存泄露参考channel错误使

    r1笔记day27 goroutine and channel

    一个简单的例子: ... go test() for { } } 例子2: package main import ( fmt sync time ) //阶乘结果存储map,key-value的方式存,并定义一个锁,避免资源竞争 var ( m = make(map[int]uint64)

    Go语言中 Channel 详解

    Go 语言中的 channel 是实现 goroutine 间无锁通信的关键机制,他使得写多线程并发程序变得简单、灵活、触手可得。下面就个人理解对 channel 使用过程中应该注意的地方进行一个简要的总结。

    Go(也被称为Golang)是由Google公司开发的一种静态强类型、编译型的编程语言 自2007年诞生以来,Go凭借其简洁、高

    Go语言的设计初衷是为了解决大规模并发处理的问题,它内置了强大的并发原语,如goroutine(轻量级线程)和channel(通道),使得开发者可以轻松编写出高性能的并发程序。与传统的线程和进程相比,goroutine的创建和...

    Go语言视频教学(1).txt

    ├─L001-Go语言-mp4 │ 01 Go开发1期 day1 开课介绍01.mp4 │ 02 Go开发1期 day1 开课介绍02.mp4 │ 03 Go开发1期 day1 开发环境搭建01.mp4 │ 04 Go开发1期 day1 开发环境搭建02.mp4 │ 05 Go开发1期 day1 高并发-...

    错误文档怎么删

    本书首先介绍了Go语言的优势特性、安装设置方法、工程结构、标准命令和工具、语法基础、数据类型以及流程控制方法,接着阐述了与多进程编程和多线程编程有关的知识,然后重点介绍了goroutine、channel以及Go提供的...

    golang开发中channel使用

    channel[通道]是golang的一种重要特性,正是因为channel的存在才使得golang不同于其它语言。channel使得并发编程变得简单容易有趣。 channel的概念和语法 一个channel可以理解为一个先进先出的消息队列。channel用来...

Global site tag (gtag.js) - Google Analytics