채널 타입

채널은 동시에 실행중인 함수들이 명시된 요소 타입의 값들을 주고) 받으며 통신할 수 있는 매커니즘을 제공한다. 초기화 되지 않은 채널의 값은 nil이다.

ChannelType = ( "chan" | "chan" "<-" |="" "<-"="" "chan"="" )="" ElementType .

채널에 추가로 붙이는 <- 연산자는 송신수신방향을 나타낸다. 방향이 주어지지 않은 경우, 채널은 양방향이다. 타입변환 혹은 할당을 통해서 채널은 송신과 수신중 한 방향으로 제한될 수 있다.

chan T          // 타입 T의 값을 보낼 수도 있고 받을 수도 있다.
chan<- float64  // float64 값들만 보낼 수 있다.
<-chan int      // int 값들만 받을 수 있다.

<- 연산자는 최대한 가장 왼쪽 채널과 연계된다:

chan<- chan int    // chan<- (chan int) 과 같다
chan<- <-chan int  // chan<- (<-chan int) 과 같다
<-chan <-chan int  // <-chan (<-chan int) 과 같다
chan (<-chan int)

새로 초기화 된 채널값은 내장 함수인 make에 채널 타입과 추가로 용량을 인자로 전달해서 만들어 진다.

make(chan int, 100)

요소의 수를 나타내는 용량은 채널안에 있는 버퍼의 크기를 정한다. 용량이 0이던지 전혀 주어지지 않았다면, 채널에 버퍼가 없는 것이며 이 경우 통신은 송신자와 수신자 모두가 준비된 상태에서만 성공한다. 반면에, 버퍼가 있다면 (송신때) 버퍼가 완전히 채워진 경우와 (수신때) 완전히 비어있는 경우를 제외하고 통신은 블로킹없이 성공한다. nil 채널은 통신할 수 없다.

채널은 내장함수 close를 사용해서 닫을 수 있다. 수신 연산자가 여러 값을 할당하는 형식을 통해 수신된 값이 채널이 닫히기 전에 보내진 것인지의 여부를 확인 할 수 있다.

송신 구문, 수신 연산, 그리고 내장 함수인 caplen의 호출시 특별한 동기화 없이도 여러 고루틴에서 하나의 채널을 공유할 수 있다. 채널들은 선입-선출 큐(first-in-first-out queues)처럼 동작한다. 예를 들어, 한 고루틴에서 어떤 채널에 값들을 송신하고 다른 고루틴에서 수신하면, 값들은 송신한 순서대로 수신된다.

results matching ""

    No results matching ""