我有一个包含未初始化通道的结构。
当我向它写入内容时,该例程将按预期方式阻塞,但是永远不会通知读者管道中有东西。
我很惊讶没有错误,我想知道Go在做什么。
在下面的示例中,消息pushed
和消息got it
均未打印。(取消注释初始化,它将像超级按钮一样起作用)
type MyStruct struct {
over chan bool
}
func main() {
nonInitialized := &MyStruct{}
// nonInitialized.over = make(chan bool)
go func() {
for i := 0; i < 10; i++ {
select {
case <-nonInitialized.over:
fmt.Println("got it")
default:
// proceed
}
fmt.Println("do some stuff")
time.Sleep(10 * time.Millisecond)
}
panic("took too long")
}()
// push on the non initialized channel
fmt.Println("pushing")
nonInitialized.over <- true
fmt.Println("pushed")
}
这是操场https://play.golang.org/p/76zrCuoeoh
(我知道我应该初始化通道,这不是问题的目的,我想知道使用未初始化的通道在Go中发生了什么。)
通道类型的“未初始化”字段或变量的所有通道类型的零值为nil
。因此,让我们研究一下nil
通道或通道上的操作。
值得 在一篇文章中收集 渠道公理 :
nil
通道上的发送将永远阻塞(规范:Send语句)nil
通道的接收将永远阻塞(规范:接收运算符)nil
通道阻塞的原因:如果一个通道值为nil
,则没有人引用它,因此没有人会准备好从中接收(我们要发送的内容);或发送任何内容(我们会从中收到什么)。
您可以在Dave Cheney:Channel Axioms中阅读更多的推理和更多详细信息。
为了完整性:
nil
频道将会引起一个运行时恐慌(就像闭一个已经封闭的通道)。nil
信道是0
; 根据nil
具有0
长度和容量的切片和地图。理由:“关闭”是一种状态,但是一个nil
通道不能具有状态(只有一个nil
通道,“关闭”通道没有一个通道,“非关闭”通道没有一个通道)。而且没有元素在nil
通道中排队(因此len
= 0),并且它没有缓冲区容量(因此cap = 0)。
以下是我的配置 java版本“1.8.0_101”java(TM)SE运行时环境(构建1.8.0_101-b13)java热点(TM)64位服务器虚拟机(构建25.101-b13,混合模式) 使用Apache http客户端v4.4调用Restful服务,服务URL具有有效的证书(SHA2) 我们使用apache http客户端调用服务。下面是代码 服务调用是间歇性失败的,有一个批处理过程在一个循
我正在尝试运行一个Spring项目。pom.xml: 结果是这样的: 2017-08-17 01:11:01.405信息9156---[restartedMain]org.ocp.TestruleemallApplication:在桌面上启动TestruleemallApplication-PL25CTR,PID 9156(C:\Users\Ilias\DesktoP\TestRuleEmall\
本文向大家介绍tensorflow 初始化未初始化的变量实例,包括了tensorflow 初始化未初始化的变量实例的使用技巧和注意事项,需要的朋友参考一下 今日在Stack Overflow上看到一个问如何只初始化未初始化的变量,有人提供了一个函数,特地粘贴过来共大家品鉴: 通过tf.global_variables()返回一个全局变量的列表global_vars, 然后以python列表解析式的
考虑如下代码: vector<double> v = { 1, 2, 3.456, 99.99 }; list<pair<string,string>> languages = { {"Nygaard","Simula"}, {"Richards","BCPL"}, {"Ritchie","C"} }; map<vector<string>,vector<int>> years = {
问题内容: 我在用Java工作。 我通常会这样设置一些对象: 问题是:在此示例中是否等于,按原样我可以假定对未初始化的对象进行空检查将是准确的? 问题答案: 正确,未显式初始化的引用类型的静态成员和实例成员都由Java 设置为。相同的规则适用于数组成员。 根据Java语言规范的第4.12.5节: 变量的初始值 程序中的每个变量在使用值之前都必须具有一个值: 每个类变量,实例变量或数组组件在创建时均