ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Golang] const와 iota
    언어/Golang 2017. 2. 15. 20:22

    아래와 같이 status 변수에 상태를 정의한다고 가정합니다.

    type status int
     
    const UNKNOWN status = 0
    const TODO status = 1
    const DONE status = 2


    이러한 세 상수는 서로 연관이 있으므로 묶어서 쓸 수 있습니다.

    const (
    	UNKNOWN status = 0
    	TODO    status = 1
    	DONE    status = 2
    )


    위와 같이 순서대로 수를 붙인다면 아래와 같이 iota를 사용할 수 있습니다. 또한 자료형도 첫 줄과 동일하게 묶입니다.

    const (
    	UNKNOWN status = iota
    	TODO
    	DONE
    )


    iota는 순서대로 0, 1, 2 붙이는 것 이욍도 사용방법이 많습니다.

    const (
    	_           = iota // 첫 줄 무시
    	KB ByteSize = 1 << (10 * iota)
    	MB
    	GB
    	TB
    	PB
    	EB
    	ZB
    	YB
    )

    iota가 0부터 시작하는데 첫 번째 값인 0은 버립니다. 다음 iota는 1이 되는데 1 << (10 * iota)를 사용했습니다. 다시말해 1 << (10 * 1)인데 << 연산자는 비트를 왼쪽으로 이동시키는 연산자로 1을 왼쪽으로 10번 이동시키겠다는 것으로 사실상 2의 10승인 1024가 됩니다. 즉, KB는 1024가 됩니다. 그 다음 MB는 1 << ( 10 * 2)이므로 2의 20승이 됩니다.


    위와 같이 첫 줄을 버려도 되지만 아래와 같이 첫 줄을 버리지 않고 동일한 기능을 하도록 구현할 수 있습니다.

    const (
    	KB ByteSize = 1 << (10 * (1 + iota))
    	MB
    	GB
    	TB
    	PB
    	EB
    	ZB
    	YB
    )


    댓글