오래 못 할 짓 하지 않기

Go 언어 실습 2 본문

4학년/캡스톤 (Capstone)

Go 언어 실습 2

쫑알bot 2024. 12. 24. 14:43
728x90

여러 배열 (예시에서는 URL) 에 대한 작업을 할 때

하나하나 처리하는 게 아니라 동시에 하고 싶은 경우에 어떻게 처리할까?

 

 

> Goroutines

 

goroutine을 사용하기 전에는 이런 게 있다면

you로 칭찬 10번 때리고, 그 뒤에 Min으로 칭찬 10번 때린다.

 

하지만 우리가 원하는 건 동시에 you Min을 같이 칭찬하는 것이다.

 

같이 하는 법은?

> Goroutine =

 

[ 사용 방법 ]

함수 Call 앞에 Go만 붙이면 된다.

[ 주의 사항 / 한계점 ]

main 함수에 두 개의 함수 모두 go를 붙이면 아무것도 출력되지 않는다

 

이유 : main함수는 go routine을 기다리지 않는다.

따라서 , main이 기다릴만한 함수가 하나 돌고 있어야 main이 유효하기에 모두 go를 때려버리면 안 됨.

 

우리 중에 한 명은 집지키고 있어야함. 

 

 

10번 줄처럼 저렇게 go를 붙인 함수의 return값을 변수에 받을 수 없다.

그럼 어떻게 받아야 할까...

 

go로 부른 함수 <-> main에서 값을 주고 받기 위해선 Channel이 필요하다.

 

 

Channel

9번 line : channel을 만들어서

12번 line : 함수에 같이 넘겨준다.

16번 line : result에 channel 값을 받아온다. 

22번 line : main과 주고 받는 channel에 넣는다.

 

 

 

문자열을 주고 받다보면 이렇게 된다.

<-c는 그 안에 값이 들어올 때까지 기다린다.

= Blocking operation 

 socket programming에서는 read() 와 같다.

 

 

c <-  로 보내는 게 있으면

<- c  로 받는 게 있어야 하고

Type도 같아야 한다.

 

 

'4학년 > 캡스톤 (Capstone)' 카테고리의 다른 글

rclone 주요 기능 분석 ( flow 위주 )  (0) 2024.12.27
Go 언어 실습 3 코드  (0) 2024.12.24
Go 언어 실습 1  (0) 2024.12.23
Go언어 정리  (0) 2024.12.23
Ceph Storage  (0) 2024.08.12