-
Golang 변수 초기화 + func init공부/프로그래밍 2015. 6. 15. 10:04
최근 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 여기 링크를 보면 된다
'공부 > 프로그래밍' 카테고리의 다른 글
binary 관련 간단한 정리 (0) 2017.03.09 Go variable export unexport & Gorp reflect panic (0) 2015.07.10 Rust - cargo를 이용한 rust 프로젝트 관리 (Cargo 사용법) (0) 2015.02.21 Turtle (0) 2014.06.24 이진탐색 (0) 2014.05.20