개발/Developing
Golang의 defer의 변수 캡쳐, 그리고 동작 원리
lazykuna
2023. 4. 2. 00:40
위스키 먹고 제정신은 아니지만 그래도 대충 후딱 정리해 둔다...
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