Go 언어 상수
상수는 프로그램이 실행되는 동안 수정되지 않는 간단한 값의 식별자입니다.
상수의 데이터 유형은 부울, 숫자(정수, 부동 소수점 및 복소수) 및 문자열만 가능합니다.
상수 정의 형식:
const identifier [type] = value
컴파일러는 해당 값을 기반으로 변수의 유형을 추론할 수 있으므로 유형 지정자 [type]을 생략할 수 있습니다.
명시적 유형 정의:
const b string = "abc"
암시적 유형 정의:
const b = "abc"
동일한 유형의 여러 선언은 다음과 같이 축약될 수 있습니다.
const c_name1, c_name2 = value1, value2
다음 예에서는 상수 적용을 보여줍니다.
package main import "fmt" func main() { const LENGTH int = 10 const WIDTH int = 5 var area int const a, b, c = 1, false, "str" //多重赋值 area = LENGTH * WIDTH fmt.Printf("面积为 : %d", area) println() println(a, b, c) }
위 예의 결과는 다음과 같습니다.
面积为 : 50 1 false str
상수는 열거형으로도 사용할 수 있습니다.
const ( Unknown = 0 Female = 1 Male = 2 )
숫자 0, 1, 2는 각각 알 수 없는 성별, 여성, 남성을 나타냅니다.
상수는 len(), cap(), unsafe.Sizeof() 상수를 사용하여 표현식의 값을 계산하는 데 사용할 수 있습니다. 상수 표현식에서 함수는 내장 함수여야 합니다. 그렇지 않으면 컴파일되지 않습니다.
package main import "unsafe" const ( a = "abc" b = len(a) c = unsafe.Sizeof(a) ) func main(){ println(a, b, c) }
위 예의 결과는 다음과 같습니다.
abc 3 16
iota
iota, 특수 상수, 컴파일러에 의해 수정될 수 있는 상수라고 생각할 수 있습니다.
각 const 키워드가 나타날 때마다 0으로 재설정되고, 다음 const가 나타나기 전에 iota가 나타날 때마다 그것이 나타내는 숫자가 자동으로 1씩 증가합니다.iota는 열거형 값으로 사용될 수 있습니다:
const ( a = iota b = iota c = iota )
첫 번째 iota는 0과 같습니다. iota가 새 행에 사용될 때마다 해당 값은 자동으로 추가됩니다. 1; 따라서 a=0, b=1, c=2는 다음과 같이 축약될 수 있습니다:
const ( a = iota b c )
iota Usage
package main import "fmt" func main() { const ( a = iota //0 b //1 c //2 d = "ha" //独立值,iota += 1 e //"ha" iota += 1 f = 100 //iota +=1 g //100 iota +=1 h = iota //7,恢复计数 i //8 ) fmt.Println(a,b,c,d,e,f,g,h,i) }
위 예의 결과는 다음과 같습니다:
0 1 2 ha ha 100 100 7 8
흥미로운 iota 예를 살펴보겠습니다.
package main import "fmt" const ( i=1<<iota j=3<<iota k l ) func main() { fmt.Println("i=",i) fmt.Println("j=",j) fmt.Println("k=",k) fmt.Println("l=",l) }
위 예의 결과는 다음과 같습니다.
i= 1 j= 6 k= 12 l= 24
iota는 0부터 시작하여 자동으로 1씩 증가한다는 의미이므로 i=1<< 0,j= 3<<1(<<; 왼쪽 시프트를 의미), 즉 i=1, j=6입니다. 이는 문제가 되지 않습니다. 출력 결과에서 k=입니다. 3<<2, l=3<<3.