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的用法相关推荐

  1. go语言channel学习与总结(一)channel的一些基本用法

    go语言中,说到并发先想到的就是goroutine,在go程序中,我们可以执行成千上万个goroutine协程,但是只是单纯的并发执行某个函数意义是不大的,既能够实现在函数与函数之间交换数据,又能使成 ...

  2. go channel 缓冲区最大限制_GO语言圣经学习笔记(八)Goroutines和Channels

    奋斗鸭!Day97 知识点 goroutinue 基本用法 golang非常深度的简化了goroutinue的使用方法,异常简单,门槛降低很多 // goroutinue 使用非常简单go f() G ...

  3. go channel 缓冲区最大限制_[Go区块链基础]go channel

    channel是Go语言在语言级别提供的goroutine间的通信方式.我们可以使用channel在两个或多个goroutine之间传递消息. channel是进程内的通信方式,因此通过channel ...

  4. 由浅入深剖析go channel

    channel 是 goroutine 之间通信的一种方式,可以类比成 Unix 中的进程的通信方式管道. CSP 模型 在讲 channel 之前,有必要先提一下 CSP 模型,传统的并发模型主要分 ...

  5. channelinactive触发后不关闭channel_go那些事儿|channel使用及其实现原理

    目录 channel背景 channel基本用法 channel应用场景 channel实现原理 channel数据结构 channel实现方式 channel注意事项 闲聊 欢迎加入我的公众号[迈莫 ...

  6. Go语言channel与select原理

    本文会尝试解释 go runtime 中 channel 和 select 的具体实现,部分内容来自 gophercon2017.Go版本为1.8.3 channel 第一部分讲述一下 channel ...

  7. 深度剖析channel

    深度剖析channel golang     2015-10-29 21:16:25     5740     0     5 channel的用法 channel是golang中很重要的概念,配合g ...

  8. Kotlin Channel系列(一)之读懂Channel每一行源码

    文章目录 有话说 概述 初识Channel Channel种类 Channel五大金刚 Send Receive Closed Queue Buffer Channel的行为 Channel源码分析 ...

  9. 【并发编程】如何用 Channel 解决并发问题?

    博主介绍: – 我是了 凡 微信公众号[了凡银河系]期待你的关注.未来大家一起加油啊~ 前言 什么是Channel? 在Go语言基础中应该就学过Channel,那个时候应该都认为只是一个基础类型,是一 ...

最新文章

  1. 线程的同步之Synchronized在单例模式中的应用
  2. 6款实用开源报表工具 | 码云周刊第 83 期
  3. dubbo系列(一)
  4. Golang——垃圾回收GC(2)
  5. VS2010与OpenCV2410简单配置
  6. C 标准库—— stdlib.h(包括 rand srand 的实现)
  7. 面试题-JQuery里Ajax的原理是怎样的?
  8. 测试丢包_如何使用ping和tracert命令检测丢包
  9. 五寸照片尺寸是多少?如何自己制作证件照?
  10. 2021最新一线互联网大厂常见高并发面试题解析,快手Java面试算法题
  11. element-ui的基本使用(一)
  12. 人人都能看懂的 AI 入门课
  13. 华为选用ServiceHot ITSM提升运维服务能力
  14. Java实现 LeetCode 506 相对名次
  15. 微信小程序java python node医疗微服务系统医院预约挂号系统
  16. 联想天逸 510S 2022怎么样
  17. 没有50W彩礼 女友被强行拽走! Python分析全国彩礼情况,心凉了!
  18. 爬虫:动态页面爬取Selenium
  19. 测试篇(三):测试用例的万能公式、对水杯和登录页面设计测试用例、测试用例的设计方法
  20. 【java简单小项目】勇者斗魔王小游戏

热门文章

  1. 小白友好——C++基于EeayX简单开发的豪华版贪吃蛇[单人模式+双蛇对战+闯关模式(地图跳转)+排行榜+音乐]
  2. Android Studio首次连接不上网易mumu模拟器解决办法
  3. 一键获取推文封面及标题摘要
  4. Apple设备型号名称映射表
  5. java反射的优缺点_Java反射机制的优缺点
  6. 华为商店的软件可以鸿蒙,鸿蒙到底想要什么?是维护渠道的霸权还是万物互联?...
  7. Access安全吗?Access安全性之QA详解
  8. ucore操作系统lab2实验报告
  9. Windows10与Ubuntu双系统安装记录
  10. 第七章 在网页中嵌入多媒体内容