概述
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
}
最后
以上就是神勇蜜粉为你收集整理的channel的用法的全部内容,希望文章能够帮你解决channel的用法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复