go언어
글 수 53
이 글은 Effective Go를 일부 번역한 글입니다.
초기화
C나 C++과는 겉보기에 크게 다르지 않음에도 Go의 초기화는 더 강력하다. 초기화 중에 복잡한 구조체를 구성할 수 있고 객체나 서로 다른 패키지를 초기화하는 순서 문제도 바르게 다뤄진다.
init 함수
마지막으로 각 소스 파일에 무항(Niladic) 함수 init
을 정의해 필요한 상태를 설정할 수 있다. (그리고 각 파일에 여러 init
함수를 넣을 수 있다.) 그리고 마지막이란 말은 정말 마지막이란 뜻이다. init
은 해당 패키지 내의 모든 변수 선언과 초기화를 처리한 뒤에 호출되며, 그 변수들은 불러온 패키지를 모두 초기화한 뒤에 처리된다.
초기화를 선언문에 표현할 수 없는 경우 외에도 init
함수는 보통 실제 연산을 시작하기 전에 프로그램 상태가 바른지 확인하거나 교정하는 데도 흔히 쓴다.
func init() { if user == "" { log.Fatal("$USER not set") } if home == "" { home = "/home/" + user } if gopath == "" { gopath = home + "/go" } // gopath may be overridden by --gopath flag on command line. flag.StringVar(&gopath, "gopath", gopath, "override default GOPATH") }