[golang] iota 키워드로 열거형 상수 정의

2024. 11. 10. 23:10·Language/Go

서론

코드 내에서 열거형 상수를 정의할 때, Go 언어는 이를 간편하게 처리할 수 있는 iota라는 키워드를 제공한다. iota는 상수의 값을 자동으로 증가시키는 특성을 가지며, 값의 증가 범위나 증감 간격을 설정하여 개발자가 반복적인 값을 일일이 지정할 필요 없이 쉽게 상수를 정의할 수 있게 해준다. 이 글에서는 iota 키워드의 기본 사용법과 다양한 활용 방법을 정리해본다.

 

기본 사용 예제

package main

import "fmt"

const (
	Low = iota
	Medium
	High
)

func main() {
	fmt.Println("Low:", Low)       // Low: 0
	fmt.Println("Medium:", Medium) // Medium: 1
	fmt.Println("High:", High)     // High: 2
}

iota는 각 상수에 대해 자동으로 0부터 시작하여 1씩 증가하는 값을 할당한다.

 

시작 값을 지정

package main

import "fmt"

const (
	NotSupported = iota - 2
	None
	Low
	Medium
	High
)

func main() {
	fmt.Println("NotSupported:", NotSupported) // NotSupported: -2
	fmt.Println("None:", None)                 // None: -1
	fmt.Println("Low:", Low)                   // Low: 0
	fmt.Println("Medium:", Medium)             // Medium: 1
	fmt.Println("High:", High)                 // High: 2
}

iota - 2를 사용하여 iota의 기본값을 변경하고, 이를 통해 상수들의 값을 -2부터 시작하도록 설정할 수 있다.

 

중간 값 건너뛰기

package main

import "fmt"

const (
	OK = iota + 200
	Created
	Accepted
	_
	NoContent
	UseProxy = iota + 300
	_
	TemporaryRedirect
)

func main() {
	fmt.Println("OK:", OK)                                // OK: 200
	fmt.Println("Created:", Created)                      // Created: 201
	fmt.Println("Accepted:", Accepted)                    // Accepted: 202
	fmt.Println("No Content:", NoContent)                 // No Content: 204
	fmt.Println("Use Proxy:", UseProxy)                   // Use Proxy: 305
	fmt.Println("Temporary Redirect:", TemporaryRedirect) // Temporary Redirect: 307
}

_를 사용하여 중간 값을 건너뛸 수 있으며, 중간에 iota를 다시 할당하여 값을 새로운 범위에서 다시 시작할 수 있다.

 

증감 간격 지정

package main

import "fmt"

const (
	FirstPage = (iota * 2) + 1
	SecondPage
	ThirdPage
)

func main() {
	fmt.Println("FirstPage:", FirstPage)   // FirstPage: 1
	fmt.Println("SecondPage:", SecondPage) // SecondPage: 3
	fmt.Println("ThirdPage:", ThirdPage)   // ThirdPage: 5
}

곱셈을 사용하여 증감 간격을 설정할 수 있다.

'Language > Go' 카테고리의 다른 글

[golang] 파일 잠금으로 프로그램 중복 실행 방지하기  (0) 2024.11.12
[golang] 현재 운영 체제 확인하기  (0) 2024.11.11
[golang] sync.WaitGroup으로 고루틴 작업 기다리기  (0) 2024.11.09
[golang] html/template 패키지로 동적 페이지 처리하기  (3) 2024.11.07
[golang] json.Marshal에서 HTML 이스케이프 문제  (3) 2024.10.31
'Language/Go' 카테고리의 다른 글
  • [golang] 파일 잠금으로 프로그램 중복 실행 방지하기
  • [golang] 현재 운영 체제 확인하기
  • [golang] sync.WaitGroup으로 고루틴 작업 기다리기
  • [golang] html/template 패키지로 동적 페이지 처리하기
在晟
在晟
  • 在晟
    Jae-Sung
    在晟
  • 전체
    오늘
    어제
    • 분류 전체보기 (25)
      • Language (23)
        • Go (23)
      • DBMS (1)
        • MariaDB (1)
      • Notes (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Jae-Sung
    • GitHub
  • 인기 글

  • 태그

    Runtime
    interface{}
    오블완
    티스토리챌린지
    http
    unsafe
    recover
    go
    filepath
    fasthttp
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
在晟
[golang] iota 키워드로 열거형 상수 정의
상단으로

티스토리툴바