같은 i를 쓰는데 결과가 다르다. 인자냐 클로저냐의 차이다 ① 등록할 때: 인자가 이 순간 평가된다 i := 0defer fmt.Println("A:", i)↳ 인자 0을 박제defer func() { … i … }()↳ 변수 i를 붙잡음i = 1← 여기서 i가 바뀐다 ② 함수가 끝날 때: 나중에 등록한 것부터 (LIFO) 먼저 실행 · 나중에 등록func() { … i … }B: 1실행 시점의 i를 읽는다 나중 실행 · 먼저 등록fmt.Println("A:", 0)A: 0등록 시점에 박제된 값 출력: B: 1 → A: 0 Go · 개념 정리Go defer·error·클로저 완전 정리LIFO, 에러 래핑, 루프 변수 함정Go는 예외를 뺐고, 그 자리를 defer와 값으로서의 error로 채웠다. 셋 다 문법은 금방 배우는데 함정은 몇 년째 나온다. 각각이 정확히 언제 무엇을 붙잡는지를 기준으로 다시 정리했다.2026.08.12