[go] 检查 channel 是否已经被关闭

Posted adream307

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[go] 检查 channel 是否已经被关闭相关的知识,希望对你有一定的参考价值。

val, ok := <-ch

如果 channel 已经被关闭,上述调用立刻返回,并且 okfalse,完整测试代码如下

package main

import (
	"log"
	"sync"
)

func main() 
	ch := make(chan int)
	var wg sync.WaitGroup
	go func() 
		for i := 0; i <= 100; i++ 
			ch <- i
		
		close(ch)
	()
	wg.Add(1)
	go func() 
		defer wg.Done()
		total := 0
		for 
			if val, ok := <-ch; ok 
				total += val
			 else 
				break
			
		
		log.Printf("recv total = %d", total)
	()
	wg.Wait()

程序输出

2020/09/11 11:52:55 recv total = 5050

以上是关于[go] 检查 channel 是否已经被关闭的主要内容,如果未能解决你的问题,请参考以下文章

[11][go] go concurrency

Go小技巧(二)— 打开已经关闭的channel

channel使用

关于Go的Channel,Silce,Map

[日常] Go语言圣经--Channel习题

channel关闭后立即返回false吗