ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
    	}
    }


    댓글