-
[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 )