2016-11-14 10 views
1

Go langでデカールされたチャンネルを2回開始できますか? main関数で同じGo Channelを2回起動できないのはなぜですか?

package main 

import (
    "fmt" 
) 

func emit(c chan string) { 

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

    for _, word := range words { 
     c <- word 
    } 
    close(c) 
} 

私は同じチャネル二回私は再びそれを使用するために、そのチャネルのデフォルト値に

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で行われたのですか? ? 私は1.6

答えて

5

チャンネルが「開始」されていない-langバージョンを行く使用しているチャンネルは、単に2つの状態のいずれかで存在している:あなたがそれらに値を送信することができ、その場合には「オープン」

  • (そして送信された値を受け取る)、または
  • "closed"で閉じられたチャンネルから送受信できない場合は、 "the-zero-value、false"となります。

一度閉じたチャネルは、永久に閉じたままです。そう、はい、あなたはmake新しいチャンネルには、移動に "再オープン"がありません。

+0

開状態と閉状態ではっきりとしています。正しいターミネーターは大きな助けになります。ありがとう:) –

関連する問題