2016-11-14 3 views
1

Go lang에서 데칼 한 채널을 두 번 시작할 수 있습니까?동일한 Go 채널을 두 번 시작할 수없는 이유는 무엇입니까?

main 함수에서
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 버전으로 이동 사용하고 두 상태 중 하나 :

당신이 그들에 값을 보낼 수있는 경우
  • "열기" (전송 된 값을 받거나)
  • "닫힌"채널에서 보내고받을 수없는 채널은 "the-zero-value, false"가됩니다.

닫힌 채널은 한 번 영원히 닫힌 채로 있습니다. 그래서 예, 당신은 make 새 채널을 가지고, 거기에 "다시"이동에 없습니다.

+0

열기 상태와 닫힌 상태에서 이제 분명해진다. 정확한 터미널 효과는 큰 도움이된다. 감사 :) –