channel的用法
channel的声明
创建有缓冲的管道
c := make(chan string,100)
创建无缓冲的管道
c := make(chan string)
往chan里写数据
for _,v := range words {c <- v // 写入chan
}
close(c)
从chan里读数据
for {t, ok := <-inif ok {t = strings.ToLower(t)words = append(words, t)} else {break}}
示例
import ("strings""fmt"
)//source 将输入的words输出到chan里,chan长度由chanLen 指定
func source(words []string, chanLen int) <-chan string {c := make(chan string,100)for _,v := range words {c <- v // 写入chan}close(c)return c}//lower word 将in中的word转换成小写输出
func lower(in <-chan string) <-chan string {var words []stringfor {t, ok := <-inif ok {t = strings.ToLower(t)words = append(words, t)} else {break}}c2 := make(chan string,100)for _,v := range words {fmt.Print(v+" ")c2 <- v // 写入chan}fmt.Println("lower end")close(c2)return c2}
func ifContain(t string, filter[]string ) bool{re := falsefor _, v := range filter {if strings.Contains(t,v) {return true}}return re
}
//filter 将in中word包含filter中单词的输出,注意只要包含filter中某一项即输出
func filter(filter[]string, in <-chan string) <-chan string {var words []stringfor {t, ok := <-inif ok {//判断是否含fiiter 若包含放在word中if ifContain(t,filter) {words = append(words,t)}} else {break}}c3 := make(chan string,100)for _,v := range words {fmt.Print(v+" ")c3 <- v // 写入chan}fmt.Println("fiter enbd")close(c3)return c3
}//sink 将in中的word输出到slice
func sink(in <-chan string) []string{var words []stringfor {t, ok := <-inif ok {words = append(words,t)} else {break}}for _,v := range words {fmt.Print(v+" ")}fmt.Println("sink end")return words
}
channel的用法相关推荐
- go语言channel学习与总结(一)channel的一些基本用法
go语言中,说到并发先想到的就是goroutine,在go程序中,我们可以执行成千上万个goroutine协程,但是只是单纯的并发执行某个函数意义是不大的,既能够实现在函数与函数之间交换数据,又能使成 ...
- go channel 缓冲区最大限制_GO语言圣经学习笔记(八)Goroutines和Channels
奋斗鸭!Day97 知识点 goroutinue 基本用法 golang非常深度的简化了goroutinue的使用方法,异常简单,门槛降低很多 // goroutinue 使用非常简单go f() G ...
- go channel 缓冲区最大限制_[Go区块链基础]go channel
channel是Go语言在语言级别提供的goroutine间的通信方式.我们可以使用channel在两个或多个goroutine之间传递消息. channel是进程内的通信方式,因此通过channel ...
- 由浅入深剖析go channel
channel 是 goroutine 之间通信的一种方式,可以类比成 Unix 中的进程的通信方式管道. CSP 模型 在讲 channel 之前,有必要先提一下 CSP 模型,传统的并发模型主要分 ...
- channelinactive触发后不关闭channel_go那些事儿|channel使用及其实现原理
目录 channel背景 channel基本用法 channel应用场景 channel实现原理 channel数据结构 channel实现方式 channel注意事项 闲聊 欢迎加入我的公众号[迈莫 ...
- Go语言channel与select原理
本文会尝试解释 go runtime 中 channel 和 select 的具体实现,部分内容来自 gophercon2017.Go版本为1.8.3 channel 第一部分讲述一下 channel ...
- 深度剖析channel
深度剖析channel golang 2015-10-29 21:16:25 5740 0 5 channel的用法 channel是golang中很重要的概念,配合g ...
- Kotlin Channel系列(一)之读懂Channel每一行源码
文章目录 有话说 概述 初识Channel Channel种类 Channel五大金刚 Send Receive Closed Queue Buffer Channel的行为 Channel源码分析 ...
- 【并发编程】如何用 Channel 解决并发问题?
博主介绍: – 我是了 凡 微信公众号[了凡银河系]期待你的关注.未来大家一起加油啊~ 前言 什么是Channel? 在Go语言基础中应该就学过Channel,那个时候应该都认为只是一个基础类型,是一 ...
最新文章
- 线程的同步之Synchronized在单例模式中的应用
- 6款实用开源报表工具 | 码云周刊第 83 期
- dubbo系列(一)
- Golang——垃圾回收GC(2)
- VS2010与OpenCV2410简单配置
- C 标准库—— stdlib.h(包括 rand srand 的实现)
- 面试题-JQuery里Ajax的原理是怎样的?
- 测试丢包_如何使用ping和tracert命令检测丢包
- 五寸照片尺寸是多少?如何自己制作证件照?
- 2021最新一线互联网大厂常见高并发面试题解析,快手Java面试算法题
- element-ui的基本使用(一)
- 人人都能看懂的 AI 入门课
- 华为选用ServiceHot ITSM提升运维服务能力
- Java实现 LeetCode 506 相对名次
- 微信小程序java python node医疗微服务系统医院预约挂号系统
- 联想天逸 510S 2022怎么样
- 没有50W彩礼 女友被强行拽走! Python分析全国彩礼情况,心凉了!
- 爬虫:动态页面爬取Selenium
- 测试篇(三):测试用例的万能公式、对水杯和登录页面设计测试用例、测试用例的设计方法
- 【java简单小项目】勇者斗魔王小游戏
热门文章
- 小白友好——C++基于EeayX简单开发的豪华版贪吃蛇[单人模式+双蛇对战+闯关模式(地图跳转)+排行榜+音乐]
- Android Studio首次连接不上网易mumu模拟器解决办法
- 一键获取推文封面及标题摘要
- Apple设备型号名称映射表
- java反射的优缺点_Java反射机制的优缺点
- 华为商店的软件可以鸿蒙,鸿蒙到底想要什么?是维护渠道的霸权还是万物互联?...
- Access安全吗?Access安全性之QA详解
- ucore操作系统lab2实验报告
- Windows10与Ubuntu双系统安装记录
- 第七章 在网页中嵌入多媒体内容