위스키 먹고 제정신은 아니지만 그래도 대충 후딱 정리해 둔다...
Golang에서 defer은 일종의 일차함수를 인자로 받는 구조로 되어 있는데, 형태가 다소 재미있다. 마치 `defer func(params) { body }(params)` 형태로 되어 있다. 그래도 말 그대로 defer이니 만큼, 이 함수는 함수가 끝나는 제일 마지막에 실행된다. 그런데 몇 가지 특이사항이 있어서 정리해 둔다.
- defer은 나중에 선언된 순으로 가장 일찍 실행된다.
- defer이 variable들을 capture 하는 시점은 함수의 수행이 끝나는 시점이다. 어렵게 생각할 것 없이, Defer이 수행될 때 변수의 값을 사용한다고 보면 된다.
- defer에 넘겨주는 인자(parameter)는 capture 되지 않는다. 어떻게 보면 당연하다
출처: https://stackoverflow.com/questions/16010694/how-golangs-defer-capture-closures-parameter
'개발 > Developing' 카테고리의 다른 글
Coroutines in C (0) | 2023.05.07 |
---|---|
Datadog Metric의 Tag 사용할 때 유의할 점 (0) | 2023.04.10 |
Python에서의 yield와 실행 순서 (0) | 2023.03.28 |
Git Rebase된 브랜치에 또 Rebase 하기 (0) | 2022.08.24 |
Thread-safe queue design (0) | 2022.08.06 |