inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정

고루틴

고루틴 클로저 관련

211

굿데이

작성한 질문수 38

0

안녕하세요.
고루틴 클로저 설명중에
반복문 클로저는 일반적으로 즉시 실행,
But 고루틴 클로저는 가장 나중에 실행(반복문 종료후) 가 어떤 의미인지 잘 아해가 안되는데요.

for문이 끝나고 나서 고루틴이 실행된다는 의미이신가요?
고루틴 안에 sleep 넣어보니 고루틴들이 실행되는거 같아서요.

답변 부탁드립니다.

go

답변 1

0

좋은사람

 

아래 예제에서 실행되는 순서를 생각해보시면 될 것 같습니다.



func A( a, b chan struct{}){ <-a fmt.Println("A()") time.Sleep( time.Second) close(b) } func B( a,b chan struct{}){ <-a fmt.Println("B()") close(b) } func C( a chan struct{}){ <-a fmt.Println("C()") } func main(){ x := make(chan struct{}) y := make(chan struct{}) z := make(chan struct{}) go C(z) go A(x, y) go C(z) go B(y, z) go C(z) close(x) time.Sleep( 3 * time.Second) }
A()
B()
C()
C()
C()

 go C(z)       -> z에 시그널이 들어 오면 동작
go A(x, y)    -> x에 시그널이 들어 오면 y를 닫는다.-> y에 시그널 전달
go C(z)       -> z에 시그널이 들어 오면 동작   
go B(y, z)    -> y에 시그널이 들어 오면 z를 닫는다. -> z에 시그널 전달
go C(z)       -> z에 시그널이 들어 오면 동작
    close(x)      -> x를 닫는다. -> x에 시그널 전달
-->  A -> B -> C -> C -> C

 



출처: https://fenderist.tistory.com/228 [Devman]

출처: https://fenderist.tistory.com/228 [Devman]

고 인터페이스 관련

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

985

1

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

0

234

1

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

0

224

1

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

0

197

1

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

0

281

1

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

0

193

1

golang 질문

0

310

1

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

0

346

1

atom 서비스 종료 관련

0

403

1

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

1

403

2

waitGroup.Done을 지연 시키는 방식

0

449

1

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

0

263

1

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

0

328

1

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

0

825

1

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

1

262

1

import 관리는 어떻게 하나요?

0

317

1

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

0

486

1

이것도 closure인가요?

0

238

1