Loading
2023. 4. 2. 00:40 - lazykuna

Golang의 defer의 변수 캡쳐, 그리고 동작 원리

https://www.redbubble.com/i/sticker/Go-Drunk-for-who-loves-go-for-everything-by-clgtart/28531596.EJUG5

위스키 먹고 제정신은 아니지만 그래도 대충 후딱 정리해 둔다...

Golang에서 defer은 일종의 일차함수를 인자로 받는 구조로 되어 있는데, 형태가 다소 재미있다. 마치 `defer func(params) { body }(params)` 형태로 되어 있다. 그래도 말 그대로 defer이니 만큼, 이 함수는 함수가 끝나는 제일 마지막에 실행된다. 그런데 몇 가지 특이사항이 있어서 정리해 둔다.

  1. defer은 나중에 선언된 순으로 가장 일찍 실행된다.
  2. defer이 variable들을 capture 하는 시점은 함수의 수행이 끝나는 시점이다. 어렵게 생각할 것 없이, Defer이 수행될 때 변수의 값을 사용한다고 보면 된다.
  3. 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