inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

구글이 만든 Golang, 기초부터 배우자 - 입문편

다음은 채널을 만들어봅시다

채널과 배열은 전혀 다른 건가요?

346

작성자 없음

작성한 질문수 0

1

뭔가 채널과 배열의 문법만 다르고

결과론적으로는

done <- s 자리에

append 함수를 동작하게 해도

같은 원리인 거 같은데

그거랑 전혀 다른건가요 아니면

좀 더 편리하게 사용할 수 있도록 만들어 둔건가요?

 

go

답변 1

0

donchanee

안녕하세요 hen Cho 수강자님. 질문에 대한 답변 드리겠습니다.

 

먼저, 채널과 배열의 차이에 대해서 질문주셨는데요.

이해하신 내용도 틀린 내용은 아닙니다. 오히려 정확히 핵심을 파악하신 듯 합니다.

 

Go 채널은 Go 루틴간의 통신을 위해 만들어진 구현입니다

채널의 작동원리에 대해 간단히 설명드리며, 배열과의 차이에 대해 말씀드리도록 하겠습니다.

 

ch := make(chan int, 3)

이 make 함수는 프로그래머가 편리하게 사용할 수 있도록 미리 초기화 과정을 진행해줍니다. make 함수는 슬라이스, 맵, 채널에 사용할 수 있는데 배열을 만들 때와는 다르게, 채널을 make할 경우 내부 저장소(heap)에 hchan이라는 구조체를 만들고 이 주소를 반환해줍니다. 그러면 ch에는 hchan의 주소가 저장되게 되고 나중에라도 언제든 찾아갈 수 있습니다.

hchan이라는 구조체는 어떻게 구성이 되어있느냐 하면, '큐'라는 자료구조로 이뤄진 3개의 int 자료형이 들어갈 수 있는 공간이 할당됩니다. 그림으로 간단히 표현해보자면 아래와 같습니다.

이렇게 공간이 할당이 되고 3개의 공간은 "원형 큐"로 버퍼 구현이 됩니다. 이외에도 hchan 부분에 'mutex' 라고 다른 Go 루틴으로부터 접근을 하거나 못하게 하는 제어를 해주는 녀석이나, 현재 큐에서 <- ch를 했을 시 보내야하는 위치 혹은 ch <- 1 을 했을 시 저장해야하는 위치 등등으로 구성이 되어있습니다.

고로, Go루틴이 발생시킬 수 있는 다양한 상황을 효율적으로 컨트롤 할 수 있는 기능들로 만들어져 있는 것이 채널입니다.

유튜브에 유용한 영상이 있어 공유드립니다. (https://youtu.be/KBZlN0izeiY)

조금 깊은 내용이라 혹시나 어려우셨다면, 다시 질문주시면 언제든 답변 드리겠습니다!

감사합니다.

gRPC 실무에서 질문

0

35

2

교안에 사용되는 app.js 파일은 어디서 받을수 있을까요?

0

41

1

소스 download

0

43

2

프로젝트 구조 관련 질문이 있습니다.

0

47

1

커넥션 min, max 설정과 관련하여

0

50

1

명령어 오류가 있으신 분들 저는 이렇게 해결했어요!

0

69

1

response 함수에 대해

0

43

1

grpc 도입을 고려할만한 케이스

0

70

2

고 인터페이스 관련

0

69

2

Join함수 사용이유가 궁금합니다

0

54

1

Streaming 중인 서비스에서 모든 파드에 broadcast하는 방법

0

118

3

vscode 설정

0

126

2

upsert

0

146

2

프론트쪽이 리액트로 되어있는데요..

0

123

2

오늘 강의 듣기 시작했는데요!

0

132

2

RunInit() 관련 질문

0

180

5

소켓 연결과 http

0

154

2

안녕하세요 혹시 강의하실때 진행하시는 몽고디비 버전은 몇인가요?

0

132

2

실무에서 주로 사용하는 compass의 다양한 기능 어디에 들어가야하나요 ?

0

108

2

에러 메시지 대응 방법

0

281

1

어떻게 실행된것인지...

1

268

2

질문 여러가지

1

335

1

1:16 구간에서 질문

1

224

1

undeclared name

1

583

2