go - iota

1 분 소요

go - iota

  • go lang에는 iota 라는 “constant incremental sequence”가 존재합니다. 필요에 따라 여러 상수를 한번에 정의하는 일들이 있는데요, 가령 January 부터 December까지 각 값에 1, …, 12 까지의 값을 정의해준다고 하겠습니다.
  • python에서는 다음과 같이 enum을 사용해서 해줄 수 있을 것 같습니다.
from enum import Enum


class Month(Enum):
    JAN = 1
    FEB = 2
    MAR = 3


if __name__ == "__main__":
    print(Month.JAN, Month.JAN.name, Month.JAN.value)
    print(Month.FEB == 2)
    print(Month.MAR == 3)
    """
    Month.JAN JAN 1
    False
    False
    """
  • golang에서는 다음처럼 할 수 있습니다. iota는 0부터 1씩 증가하는 값으로 해당 블록 내에서 호출될때마다 1씩 증가합니다. 값이 생략되어 있으면 호출되어 있지 않아도 알아서 값이 지정됩니다.
// iota.go
package main

import "fmt"

func main() {
    /*
    iota 는 0부터 시작하여 1씩 증가하는 incremental constant입니다.
    */
    const (
        JAN int = iota + 1 // 0 + 1
        FEB // 1 + 1
        MAR // 2 + 1
        APR
        MAY
        JUN
        JUL
        AUG
        SEP
        OCT
        NOV
        DEC // 11 + 1
    )
    fmt.Println(JAN) // 1
    fmt.Println(DEC) // 12
}
  • iota를 사용하지 않을 경우 아래와 같이 일일이 값을 입력해줘야 합니다. 불필요한 syntantic sugar가 아닌가 싶기도 하지만, 일단은 이런것도 있다 라고 알아두면 될 것 같아요.
package main

func main() {
    const (
        JAN int = 1
        FEB int = 2
        // ...
        DEC int = 12
    )
}

Reference

댓글남기기