Go 언어

본문 바로가기
사이트 내 전체검색


Go 언어
Go 언어

3. 클로저를 고루틴으로 실행하기

페이지 정보

작성자 관리자 댓글 0건 조회 5,330회 작성일 19-03-12 08:17

본문

3. 클로저를 고루틴으로 실행하기

함수안에서 클로저를 정의한 뒤 고루틴으로 실행할 수 있다.


package main

import (

 "fmt"
 "runtime"

)

func main() {

 runtime.GOMAXPROCS(1) // CPU를 하나만 사용

 s := "Hello, world!"

 for i := 0; i < 100; i++ {

  go func(n int) {          // 익명 함수를 고루틴으로 실행(클로저)

   fmt.Println(s, n) // s와 매개변수로 받은 n 값 출력

  }(i)                      // 반복문의 변수는 매개변수로 넘겨줌

 }

 fmt.Scanln()

} 


코드를 수정하여 변수 i를 클로저의 매개변수로 넘기지 않고 fmt.Println으로 바로 출력해 본다.


package main

import (

 "fmt"
 "runtime"

)

func main() {

 runtime.GOMAXPROCS(1)

 s := "Hello, world!"

 for i := 0; i < 100; i++ {

  go func() {

   fmt.Println(s, i) // 반복문의 변수를
                                          // 클로저에서 바로 출력

  }()

 }

 fmt.Scanln()

} 


이렇게 되면 변수 i는 0부터 99까지 증가하고, 다시 100이 되면서 반복문이 끝난다.

고루틴은 반복문이 완전히 끝난 다음에 생성되므로 고루틴이 생성된 시점의 변수 i의 값은 `100이다.

따라서 모든 Hello. world! 100이 출력된다.


코어를 여러개 사용하면 결과는 조금 달라지지만 의도했던데로 0부터 99까지 빠짐없이 출력되지는 않는다.


클로저를 고루틴으로 실행할 때 반복문에 의해 바뀌는 변수는 반드시 매개변수로 넘겨준다.

매개변수로 넘겨주는 시점에 해당 변수의 값이 복사되므로 고루틴이 생성될 때 그대로 사용할 수 있다.



댓글목록

등록된 댓글이 없습니다.


개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.