为什么同一个Go Channel无法启动两次?

Ank*_*and 2 channel go goroutine

我们可以在Go lang两次启动一个十分水平通道吗?

package main

import (
    "fmt"
)

func emit(c chan string) {

    words := []string {"The", "quick", "brown", "fox"}

    for _, word := range  words {
        c <- word
    }
    close(c)
}
Run Code Online (Sandbox Code Playgroud)

在函数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
}
Run Code Online (Sandbox Code Playgroud)

产量

所以再次使用它我要声明另一个频道.如果这不是错误,为什么在Go Lang中完成.?我正在使用go -lang 1.6版

Vol*_*ker 5

频道不是"开始"的,频道只是存在并处于以下两种状态之一:

  • "打开",在这种情况下,您可以向它们发送值(并接收发送的值),或
  • "关闭",你不能从一个封闭的通道发送和接收导致"零值,错误".

曾经封闭的通道永远关闭.所以,是的,你需要make一个新的频道,Go中没有"重新开放".