我是靠谱客的博主 神勇蜜粉,最近开发中收集的这篇文章主要介绍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
}

最后

以上就是神勇蜜粉为你收集整理的channel的用法的全部内容,希望文章能够帮你解决channel的用法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(27)

评论列表共有 0 条评论

立即
投稿
返回
顶部