为什么同一个Go频道不能启动两次?
问题描述:
我们可以在Go lang中两次启动一个decalred频道吗?为什么同一个Go频道不能启动两次?
package main
import (
"fmt"
)
func emit(c chan string) {
words := []string {"The", "quick", "brown", "fox"}
for _, word := range words {
c <- word
}
close(c)
}
在main函数,如果我尝试使用相同的通道两次我得到该通道的默认值
func main() {
wordChannel := make(chan string)
go emit(wordChannel)
for word := range wordChannel {
fmt.Printf("%s ", word)
}
go emit(wordChannel)
word1 := <-wordChannel
fmt.Printf("%s" , word1) // prints Default value
}
所以再次使用它,我来宣布另一个频道。 如果这不是一个错误,为什么这是在Go Lang中完成的。 ? 我使用去琅版本1.6
答
通道未“启动”,渠道只是存在,有两种状态:
- “开放”,在这种情况下,您可以发送值,将其(并接收发送的值)或
- “关闭”,其中您无法发送和接收来自封闭通道的结果为“零值,假”。
一旦封闭的渠道永远保持关闭。所以是的,你必须make
一个新的频道,Go没有“重新打开”。
现在变得清楚,现在开放和关闭状态。正确Terminiolgy有很大的帮助。谢谢 :) –