2011-08-04 4 views

답변

5

const?

const (
    pi = 3.14 
    foo = 42 
    bar = "hello" 
) 
+0

이러한 블록에는 이름이 있습니까? –

+1

@Darius : no :-(어쨌든 이것은 그룹화하지 않습니다. –

+0

모든 상수에 동일한 사용자 정의 유형을 지정하면 블록에 이름을 붙일 수 있습니다 .Imx가 MyFlag에서 수행하려고하는 것과 비슷합니다 예 : –

11

상수 사용 방법에 따라 두 가지 옵션이 있습니다.

첫 번째

유형 MyFlag이있을 것이다 :,

type MyFlag int 

const (
    Foo MyFlag = 1 
    Bar 
) 

FooBar을 예컨대을 INT에 따라 새로운 유형을 생성하고,이 새로운 유형을 사용하여 상수를 선언하는 것입니다. 당신이 MyFlag에서 다시 int 값을 추출 할 경우에는 형 coersion 필요 :이 불편하면

var i int = int(Bar) 

을 베어 CONST 블록의 사용 newacct의 제안 :

const (
    Foo = 1 
    Bar = 2 
) 

FooBar int, float 등등에 할당 할 수있는 완벽한 상수입니다.

이것은 상수 섹션의 Effective Go에서 다룹니다. C/C++와 같은 값의 자동 할당에 대한 iota 키워드에 대한 설명도 참조하십시오.

+1

첫 번째 예에서는 Bar가 유형이 지정되지 않았습니다. 할당의 오른쪽이 비어있는 경우에만 Foo의 유형을 선택합니다.이 경우 iota를 사용하는 것이 옳습니다. –

+0

@Evan 고맙습니다. 답을 게시하기 전에 예제를 테스트했지만, 어쨌든 여분의 과제가 거기에 터졌습니다. – lnmx

+0

의도했는지 여부는 확실하지 않지만 같은 값과 유형이 있습니다. –

2

이 그룹화로 달성하고자하는 대상에 따라 다릅니다. 단지 프로그래머 (편집자 접 수)에 대한 좋은 시각 블록을 추가하지만 (당신이 블록의 이름을 지정할 수 없습니다) 컴파일러를 위해 아무것도하지 않는

const (
    c0 = 123 
    c1 = 67.23 
    c2 = "string" 
) 

: 이동은 다음 괄호 구문을 그룹화 허용 .

이 블록에 의존하는 유일한 것은 Go에있는 iota constant declaration입니다 (이는 enums에 매우 유용합니다). 자동 증분을 쉽게 만들 수 있습니다 (자동 증분보다 더 많은 점이 있습니다 : 링크의 자세한 내용). (3 + 5 * 0) c0 = 3c1 = 8 (3 + 5 * 1) c2 = 13 (2 * 3 + 5) 상수를 생성한다

const (
    c0 = 3 + 5 * iota 
    c1 
    c2 
) 

예를 들어이

.

1

가장 가까운 열거 형 접근 방식은 상수를 유형으로 선언하는 것입니다. 최소한 enum 유형의 주요 특권 인 유형 안전성을 가지고 있습니다.

type PoiType string 

const (
    Camping   PoiType = "Camping" 
    Eatery    PoiType = "Eatery" 
    Viewpoint   PoiType = "Viewpoint" 
)