golang 并行实践:通道 channel(2)

这里主要写个关于通道的案例

不想看啰嗦,可以直接看案例(源码)=>

通道 channel

通道 channel 用于并行的进阶操作,将事件分成两个通道。每个通道是并行的,相互不影响,但是进入通道后,就是单行的。

变量名 chan

完整案例

/*
@Time : 2021/7/1 11:17
@Author : dao
@File : 通道 channel
@Software: GoLand
*/

package main

import (
"fmt"
"time"
)

/**
* @Description:展示数字
* @param ch
*/
func ShowNum(ch chan int) {
for val := range ch {
fmt.Printf("展示当前传来的数字: %d\n", val)
time.Sleep(time.Second)
}
}

/**
* @Description:申明一个字典(通道)
*/
var allchans map[int]chan int

func main() {
//如果字典通道为空,赋值一个空的字典
if allchans == nil {
allchans = map[int]chan int{}
}
//增加2个通道,标识0和1
chanNums := []int{0, 1}

//将通道加入字典,前提是通道标识不重复
for _, v := range chanNums {
//判断字典(ok)=(true/false)
_, ok := allchans[v]
if !ok {
//创建一个通道,加入字典
ch := make(chan int)
allchans[v] = ch
go ShowNum(allchans[v])
}
}

//写个循环,分别根据条件进入两个通道。我们就会发现两个通道,是并行的
for i := 0; i < 10; i++ {
switch i % 2 {
case 0:
allchans[0] <- i
break
case 1:
allchans[1] <- i
break
}
}
//关闭通道(循环)
for v := range allchans {
close(allchans[v])
}
}

效果

golang 并行实践:通道 channel(2)(含案例)_赋值

源码

不想看啰嗦,可以直接看案例(源码)=