inflearn logo
강의

Course

Instructor

GO Language Programming Core Basics Introduction Course, Easy and Quick to Complete

Channel Basics

2개씩 체크가 되는 이유가 궁금합니다.

328

wofjeiong2ewg23

15 asked

0

go func() {
   for i := 0; i < 5; i++ {
      fmt.Println("check : ", i)
      ch <- true
   }
   close(ch) // 5회 채널에 값 전송 후 채널 닫기
}()

for i := range ch { // 채널에서 값을 꺼내온다. 닫힐 때 까지
   fmt.Println("ex1 : ", i)
}

출력

check : 0

check : 1

ex1 : true

ex1 : true

check : 2

check : 3

ex1 : true

ex1 : true

check : 4

ex1 : true

 

위 코드가 아래와 같이 출력됩니다. 왜 2개씩 출력이 되는 걸까요?.. 제 생각에는 check가 0부터 하나씩 출력이 되야 할 것 같은데.. ch := make(chan bool, 2) 이렇게 버퍼(?)를 추가해 주면 3개 3을 추가하면 4개씩 늘어나네요.

기본이 2개씩 모아서 실행을 하고 추가되는 값 만큼 처리를 한다고 생각하면 될까요?

+) 개인적으로 강사님 의견이 궁금한 부분인데요.
restAPI를 Java-Spring 대신 Go로 짠다고 했을 때 비동기가 중요한 작업이라고 하면 Go가 더 괜찮은 선택이 될 수 있을까요?

go

Answer 1

1

niceman

네 맞습니다.

print에 의해 두 번 출력 되는걸로 보여지네요!

+)

비동기 작업에서도 Go 뿐만 아니라 다른 언어들도 많다고 생각이 드네요.

물론, Go가 타언어 대비 런타임에서 가장 빠른 속도와 편한 배포 방법 등이 장점이 될 것 같습니다.

언어를 선택하는건 구현하는 사람의 숙련도에 달려있다고 생각이 드네요~

Go로 충분히 원하시는 것들을 구현하실 수 있으니 사용하기 편한 언어로 하셔도

최근에는 괜찮을 것 같습니다.(그만큼 하드웨어 퍼포먼스가 좋아서요!)

 

고 인터페이스 관련

0

69

2

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

0

54

1

vscode 설정

0

126

2

arm64

0

202

2

undefined 에러 : UndeclaredImportedName

0

343

1

godoc 에러 관련

0

206

1

package is not in std 오류

0

986

1

맵 예제 코드가 바이러스 검사에 걸려요

0

234

1

for 반복문에서 break와 continue 차이점

0

224

1

후치연산 관련 질문입니다.

0

197

1

package관리에 질문이 있습니다.

0

282

1

go channel 에제에서 질문이 있습니다.

0

193

1

golang 질문

0

310

1

재귀 함수 관련하여 질문이 있습니다.

0

346

1

atom 서비스 종료 관련

0

403

1

vscode 환경설정 업데이트 부탁드립니다

1

404

2

waitGroup.Done을 지연 시키는 방식

0

449

1

첫 번째 예제 질문있습니다.

0

263

1

go 표준 코드 컨벤션이 있나요?

0

825

1

slice에서 make 궁금한 게 있습니다.

1

262

1

import 관리는 어떻게 하나요?

0

317

1

개발환경설정 질문드립니다.

0

486

1

이것도 closure인가요?

0

238

1

짧은 선언으로 변수 여러개를 만들때

0

241

1