강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của ew2io3ogji23
ew2io3ogji23

câu hỏi đã được viết

Khóa học cơ bản nhập môn về lập trình ngôn ngữ GO nhanh chóng và dễ dàng

Cơ bản về kênh

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

Viết

·

322

·

Đã chỉnh sửa

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

Câu trả lời 1

1

niceman님의 프로필 이미지
niceman
Người chia sẻ kiến thức

네 맞습니다.

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

+)

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

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

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

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

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

 

Hình ảnh hồ sơ của ew2io3ogji23
ew2io3ogji23

câu hỏi đã được viết

Đặt câu hỏi