-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
2개씩 체크가 되는 이유가 궁금합니다.
23.01.10 10:44 작성 23.01.10 10:52 수정 조회수 208
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가 더 괜찮은 선택이 될 수 있을까요?
답변을 작성해보세요.
1
좋은사람
지식공유자2023.01.11
네 맞습니다.
print에 의해 두 번 출력 되는걸로 보여지네요!
+)
비동기 작업에서도 Go 뿐만 아니라 다른 언어들도 많다고 생각이 드네요.
물론, Go가 타언어 대비 런타임에서 가장 빠른 속도와 편한 배포 방법 등이 장점이 될 것 같습니다.
언어를 선택하는건 구현하는 사람의 숙련도에 달려있다고 생각이 드네요~
Go로 충분히 원하시는 것들을 구현하실 수 있으니 사용하기 편한 언어로 하셔도
최근에는 괜찮을 것 같습니다.(그만큼 하드웨어 퍼포먼스가 좋아서요!)
답변 1