티스토리 뷰
개요
Go를 사랑한다고 말하고 다녀놓고서는 이걸 확실히 해두지 못했었다.
결론부터 말하면
- main 함수(역시 고루틴이다)이 종료하면 모든 고루틴은 종료한다.
- 하지만, 그 외의 함수는 리턴을 하더라도 함수 내에서 실행한 고루틴은 종료하지 않는다.
main 함수가 종료하면 고루틴도 종료된다
예제 1. 고루틴 중간 종료
코드 링크: https://goplay.tools/snippet/78mv5TTsJMd
고루틴은 1초를 기다렸다 출력을 하는 코드인데, 그 전에 main 함수가 종료해버리기에 고루틴도 종료가 되어버려 출력을 하지 못한다.
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("main start")
go func() {
time.Sleep(1 * time.Second)
fmt.Println("go routine")
}()
fmt.Println("main end")
return
}
// Output:
// main start
// main end
가장 간단한 (하지만 바람직하지 못한) 해법으로 고루틴이 동작할 동안 main 함수가 기다렸다 종료하면, 고루틴이 제대로 실행되는 것을 볼 수 있다.
코드 링크: https://goplay.tools/snippet/UJD2A0V4p9P
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("main start")
go func() {
time.Sleep(1 * time.Second)
fmt.Println("go routine")
}()
fmt.Println("main end")
**time.Sleep(2 * time.Second) // 고루틴을 기다려준다.**
return
}
// Output:
// main start
// main end
// go routine
예제 2. 함수가 종료해도 함수 내 고루틴은 종료하지 않는다
main 함수외의 함수는 리턴을 하더라도 함수 내에서 실행한 고루틴은 종료하지 않는다.
코드 링크: https://goplay.tools/snippet/QBPpEyUM0L5
myGo 함수가 이미 리턴을 했음에도 함수 내부에서 실행한 고루틴은 종료하지 않고 실행된다.
package main
import (
"fmt"
"time"
)
func myGo() {
go func() {
time.Sleep(1 * time.Second)
fmt.Println("go routine")
}()
fmt.Println("myGo function returns")
return
}
func main() {
fmt.Println("main start")
myGo()
time.Sleep(2 * time.Second)
fmt.Println("main end")
return
}
// Output:
// main start
// myGo function returns
// go routine
// main end
반응형
'golang' 카테고리의 다른 글
Go, XORM, Soft delete, Unscoped (0) | 2024.02.14 |
---|---|
Golang: http.Client의 Timeout (0) | 2023.12.20 |
Golang: timezone 설정하기 (0) | 2023.06.11 |
Golang: 개발중에만 log 출력이 되어야 한다면 (0) | 2023.06.10 |
Golang: HTTP 클라이언트의 연결 관리(3) (0) | 2023.05.14 |
반응형
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 잡학툰
- OpenAI
- agile
- go
- 독서
- solid
- strange
- Bug
- API
- Shortcut
- Gin
- bun
- 2023
- 독서후기
- github
- 영화
- 클린 애자일
- notion
- intellij
- clean agile
- golang
- 노션
- 인텔리제이
- folklore
- ChatGPT
- 체호프
- websocket
- 오블완
- 티스토리챌린지
- 제이펍
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함