-
[Golang] init() 함수 호출 시점언어/Golang 2017. 1. 18. 18:00
var WhatIsThe = AnswerToLife() func AnswerToLife() int { return 42 } func init() { WhatIsThe = 0 } func main() { if WhatIsThe == 0 { fmt.Println("It's all a lie.") } }
AnswerToLife()함수는 init()함수가 호출되기 이전에 호출이 됩니다. 그리고 init() 함수는 main() 함수가 호출되기 이전에 호출이 됩니다.
명심해야 할 것은 main()이 있던 없던 init()함수는 항상 호출됩니다. 따라서 init()함수를 가지고 있는 패키지를 import할 경우 init()함수가 실행됩니다.
또한, 패키지 당 여러 init () 함수를 가질 수 있으며, 모든 변수가 초기화 된 후 코드에 나타나는 순서대로 실행됩니다. Go 패키지 대부분은 테이블 같은 값을 초기화 하기 위해서 아래와 같이 init()를 사용합니다.
func init() { const poly = 0x04C11DB7 for i := range crctab { crc := uint32(i) << 24 for j := 0; j < 8; j++ { if crc&0x80000000 != 0 { crc = (crc << 1) ^ poly } else { crc <<= 1 } } crctab[i] = crc } }