수색…
소개
Iota는 단조롭게 성장하는 시작 값에서 숫자 상수를 선언하는 방법을 제공합니다. Iota는 시스템 및 네트워크 프로그래밍에서 자주 사용되는 비트 마스크를 선언하고 관련 값이있는 다른 상수 목록을 선언하는 데 사용할 수 있습니다.
비고
iota
식별자는 상수 목록에 값을 할당하는 데 사용됩니다. iota가 목록에서 사용되면 0의 값으로 시작하고 상수 목록의 각 값에 대해 1 씩 증가하며 각 const
키워드에서 재설정됩니다. 다른 언어의 열거 형과 달리 iota는 표현식 (예 : iota + 1
)에서 사용할 수 있으므로 유연성이 향상됩니다.
iota의 간단한 사용
상수 목록을 만들려면 각 요소에 iota
값을 할당하십시오.
const (
a = iota // a = 0
b = iota // b = 1
c = iota // c = 2
)
단축 된 방법으로 상수 목록을 만들려면 - iota
값을 첫 번째 요소에 할당하십시오.
const (
a = iota // a = 0
b // b = 1
c // c = 2
)
식에 iota 사용하기
iota
는 표현식에서 사용될 수 있으므로 0부터 시작하는 간단한 증분 정수 이외의 값을 할당하는 데에도 사용할 수 있습니다. SI 단위의 상수를 만들려면 Effective Go 에서 다음 예제를 사용하십시오.
type ByteSize float64
const (
_ = iota // ignore first value by assigning to blank identifier
KB ByteSize = 1 << (10 * iota)
MB
GB
TB
PB
EB
ZB
YB
)
값 건너 뛰기
iota가 사용되지 않아도 상수 목록의 모든 항목에 대해 iota
의 값이 계속 증가합니다.
const ( // iota is reset to 0
a = 1 << iota // a == 1
b = 1 << iota // b == 2
c = 3 // c == 3 (iota is not used but still incremented)
d = 1 << iota // d == 8
)
상수가 전혀 생성되지 않아도 증분됩니다. 즉 빈 식별자를 사용하여 값을 완전히 건너 뛸 수 있습니다.
const (
a = iota // a = 0
_ // iota is incremented
b // b = 2
)
첫 번째 코드 블록은 Go Spec (CC-BY 3.0)에서 가져 왔습니다.
표현식 목록에서 iota 사용
iota
는 각 ConstSpec
후에 증가하기 때문에 동일한 표현식 목록 내의 값은 iota
대해 동일한 값을 갖습니다.
const (
bit0, mask0 = 1 << iota, 1<<iota - 1 // bit0 == 1, mask0 == 0
bit1, mask1 // bit1 == 2, mask1 == 1
_, _ // skips iota == 2
bit3, mask3 // bit3 == 8, mask3 == 7
)
이 예제는 Go Spec (CC-BY 3.0)에서 가져 왔습니다.
비트 마스크에 iota 사용
Iota는 비트 마스크를 만들 때 매우 유용 할 수 있습니다. 예를 들어, 보안, 인증 및 / 또는 준비가 될 수있는 네트워크 연결 상태를 나타 내기 위해 다음과 같은 비트 마스크를 만들 수 있습니다.
const (
Secure = 1 << iota // 0b001
Authn // 0b010
Ready // 0b100
)
ConnState := Secure|Authn // 0b011: Connection is secure and authenticated, but not yet Ready
const에서 iota 사용
const 생성을위한 열거 형입니다. Go 컴파일러는 0에서 iota를 시작하고 다음 상수마다 1 씩 증가시킵니다. 값은 런타임보다는 컴파일 타임에 결정됩니다. 이 때문에 우리는 런타임에 평가되는 표현식에 iota를 적용 할 수 없습니다.
const에서 iota를 사용하는 프로그램
package main
import "fmt"
const (
Low = 5 * iota
Medium
High
)
func main() {
// Use our iota constants.
fmt.Println(Low)
fmt.Println(Medium)
fmt.Println(High)
}
Go Playground 에서 사용해보기