[Golang] err is shadowed during return

JJeong·2021년 7월 29일
0

좀좀따리 개발지식

목록 보기
34/39
post-thumbnail

err is shadowed during return이런 에러를 받았다.

해설을 하자면 = 연산자를 :=로 바꾼데서 문제가 시작된다. Go에서는 기초 중에 기초 문법이지만 굳이 설명을 하자면 :=는 변수 선언과 초기화를 동시에 하는 연산자다. 따라서 원래의 예제 취지는 Named return argument로써 err라는 변수를 만들고 여기에 err값을 할당하는 것인데 너무도 자연스럽게 새 변수를 할당해버리고 만 것이다.

여기서 두번째 문제를 간과한 것인데 일반적인 상황이라면 “않이.. 똑같은 변수명으로 두번 선언을 하면 컴파일 전에 알려줬어야죠! 쒹쒹” 하고 화를 냈을테지만 나는 Golang의 block scope마저 놓치고 말았다.

만약 이 코드가 동작했다면 실패가 발생하더라도 for 루프가 다 마무리 될 때까지 리턴이 발생하지 않고 for 루프를 빠져나왔을 것이다. 결국 스코프 안의 err는 루프 종료와 함께 날아가버리고 실제로는 초기화 되지 않은 err 또는 nil값이 반환이 되는 것이다.

신묘한 컴파일러의 힘으로 이 에러를 사전에 잡아냈고 나는 디버깅의 지옥에서 구원받아 포스팅을 쓰는 중이다. Go 문법에 조금 더 익숙해 질 필요가 있다고 느껴진다.


이 분 포스팅이 너무 재밌다. 다른 글도 읽어보고 싶다ㅋㅋㅋ
'신묘한 컴파일러의 힘으로 이 에러를 사전에 잡아냈고' 위 포스팅을 보고 시원하게 궁금증이 해소됐다.😜

0개의 댓글