최근 Go를 이용해 프로그래밍을 해보면서 신기한 경험을 많이하고 있다.

db를 초기화 해주는 init함수를 만들어 놓고 사용하는 코드를 집어넣지도 않았는데
db가 초기화가 되어있다. 그리고 다른 것 또한 잘돌아간다. main에다 init함수 호출하는
코드를 넣었더니 오류가 난다.


이게 무슨일이지 하고 검색해보니 func init()같은 함수를 만들게 될 경우 main함수 호출 이전에 같은 패키지 안에 있는 init함수들을 호출해준다.



위에처럼 package level의 변수들 같은 경우 선언과 함께 초기화 된다.

(단 자신이 초기화 하기위해 사용하는 변수들이 초기화 된 이후 초기화 된다.)

변수들을 dependency analysis를 통해 패키지 레벨 변수들은 아직 초기화가 안된 상황에서 초기화를 준비한다. 그리고 다른 변수에 dependency가 없는 것들을 먼저 초기화 해주고
그 다음 dependency가 있는 변수가 모두 초기화가 된 상황 이라면 dependency가 있는
변수를 초기화 한다. 위 소스는 d-b-c-a순서로 초기화를 한다.


이 이외에도 함수에 변수가 reference되어 있을 경우

static method에 대해 reference 되어있을경우도

이런 dependency check는 패키지 단위로 실행이 된다.


더 자세한건 http://golang.org/ref/spec#Package_initialization 여기 링크를 보면 된다


저작자 표시 비영리 변경 금지
신고
Creative Commons License
Creative Commons License

WRITTEN BY
Jen6
jen6의 개발, 보안 블로그 까끔가다 쓸대 있는걸 올리려고 노력중

받은 트랙백이 없고 , 댓글이 없습니다.
secret