go - 选择语句选择没有数据
问题描述
我正在编写一个类似于以下示例的测试,随机通过或失败。
t1 := make(chan []byte)
t2 := make(chan []byte)
done := make(chan bool)
DoStuff(t1, t2, done)
out := [][]byte{}
L:
for {
select {
case d := <-t1:
out = append(out, d)
case d := <-t2:
out = append(out, d)
case <-done:
break L
}
}
t.Logf("%s", out)
if len(out) != expectedLength {
t.Fail()
}
日志显示,有时out
切片末尾附加了空元素,可以是任意数字,非常随机。发送端发送它应该发送的内容,所以我假设是因为 for 循环和 select 在读取分支后执行它们。还可能值得一提的是,当写入完成的通道时,通道都将同时关闭。
解决方案
推荐阅读
- java - 带有一些 ImageViews 的动画包
- vba - Word VBA 复制某些突出显示的颜色并粘贴到新文档中而不会丢失格式
- python-3.x - pyspark中的k均值聚类
- polymer - 向 vaadin-split-layout 元素中的元素添加 iron-resize
- terminal - ARD Unix 命令帮助 - 回答是吗?- 自动域取消加入/重新加入
- php - 无效的命令“位置”,可能拼写错误或由未包含在服务器配置中的模块定义
- sublimetext3 - SublimeText3 中的 binary_file_patterns 和 index_exclude_patterns 有什么区别?
- spring-boot - 如何为具有弹簧安全性的匿名用户授权端点
- javascript - Django 项目 - 使用 javascript 脚本的引导导航不起作用 - JavaScript 应该去哪里?
- wordpress - 基于高级自定义字段数据的 Wordpress 通知