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

时间:2016-11-14 11:20:56

标签: go channel 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)
}

在函数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
}

Output

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

1 个答案:

答案 0 :(得分:5)

频道不是“已启动”,频道只是存在且处于以下两种状态之一:

  • “open”,在这种情况下,您可以向他们发送值(并接收发送的值),或
  • “关闭”,您无法从已关闭的频道发送和接收,会导致“零值,错误”。

曾经关闭的频道永远关闭。所以,是的,你必须config.azf = { enabled: true, protocol: 'http', host: '192.168.4.180', port: 8080, custom_policy: undefined }; 一个新频道,Go中没有“重新开启”。