go语音之进阶篇无缓冲channel

Posted nulige

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语音之进阶篇无缓冲channel相关的知识,希望对你有一定的参考价值。

1、无缓冲channel

示例:

package main

import (
	"fmt"
	"time"
)

func main() {
	//创建一个无缓存的channel
	ch := make(chan int, 0)

	//len(ch)缓冲区剩余数据个数, cap(ch)缓冲区大小
	fmt.Printf("len(ch) = %d, cap(ch)= %d
", len(ch), cap(ch))

	//新建协程
	go func() {
		for i := 0; i < 3; i++ {
			fmt.Printf("子协程:i = %d
", i)
			ch <- i //往chan写内容
		}
	}()

	//延时
	time.Sleep(2 * time.Second)

	for i := 0; i < 3; i++ {
		num := <-ch //读管道中内容,没有内容前,阻塞
		fmt.Println("num = ", num)
	}

}

执行结果:

len(ch) = 0, cap(ch)= 0
子协程:i = 0
num =  0
子协程:i = 1    
子协程:i = 2   
num =  1
num =  2

  

以上是关于go语音之进阶篇无缓冲channel的主要内容,如果未能解决你的问题,请参考以下文章

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

云原生训练营模块二 Go语言进阶

云原生训练营模块二 Go语言进阶

go语音之进阶篇接口的继承

Go之初探--channel

go语音之进阶篇方法表达式