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 := <-in
		if 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 []string

	for {
		t, ok := <-in
		if 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 := false
	for _, 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 []string
	for {
		t, ok := <-in
		if 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 []string

	for {
		t, ok := <-in
		if ok {

				words = append(words,t)

		} else {
			break
		}
	}
	for _,v := range words {
		fmt.Print(v+" ")
	}
	fmt.Println("sink end")
	return words
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值