아래와 같이 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
)


'언어 > GO' 카테고리의 다른 글

[GO] AES ECB 모드 암호화 (PKCS5, PKCS7)  (0) 2017.02.17
[GO] JSON 사용하기  (0) 2017.02.16
[GO] const와 iota  (0) 2017.02.15
[GO] 구조체 (struct)  (0) 2017.02.15
[GO] 메서드(Method)  (0) 2017.02.15
[GO] 명명된 함수형 (Named Function)  (0) 2017.02.08

+ Random Posts