PHpullh
학습 라이브러리/Go/채널 방향과 소유권

GO · 고루틴/채널

채널 방향과 소유권

채널 방향(chan, )으로 읽기/쓰기 권한을 제한합니다. 데이터 흐름을 명확히 합니다.

고루틴/채널중급channel-directionsend-onlyreceive-onlyownership

핵심 설명

채널 방향(chan, )으로 읽기/쓰기 권한을 제한합니다. 데이터 흐름을 명확히 합니다.

Go code

package main

import "fmt"

// 송신 전용: chan<-
func producer(out chan<- int) {
	for i := 0; i < 5; i++ {
		out <- i
	}
	close(out) // 생산자가 채널 소유 → 닫기 책임
}

// 수신 전용: <-chan
func consumer(in <-chan int) {
	for v := range in {
		fmt.Println("수신:", v)
	}
}

// 변환: 수신 → 처리 → 송신
func transform(in <-chan int, out chan<- string) {
	defer close(out)
	for v := range in {
		out <- fmt.Sprintf("#%d", v)
	}
}

func main() {
	nums := make(chan int, 5)
	strs := make(chan string, 5)

	go producer(nums)
	go transform(nums, strs)

	for s := range strs {
		fmt.Println(s)
	}
}

학습 팁

채널을 만든 고루틴(생산자)이 닫기 책임을 가집니다. 수신자가 채널을 닫으면 생산자에서 패닉이 발생합니다.

주의할 점

이미 닫힌 채널에 데이터를 보내면 panic: send on closed channel이 발생합니다. 닫기 책임은 반드시 하나의 고루틴에만 부여하세요.

자주 묻는 질문

채널 방향과 소유권란 무엇인가요?

채널 방향( chan , )으로 읽기/쓰기 권한을 제한합니다. 데이터 흐름을 명확히 합니다.

채널 방향과 소유권 학습 시 주의할 점은 무엇인가요?

이미 닫힌 채널에 데이터를 보내면 panic: send on closed channel 이 발생합니다. 닫기 책임은 반드시 하나의 고루틴에만 부여하세요.

Continue Learning

Go 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.