Go 언어로 많은 상수를 그룹화하는 것이 바람직한 (또는 오른쪽) 방법은 무엇입니까? 예를 들어 C#과 C++ 모두 enum
입니다.Go 언어의 상수 그룹화
답변
const
?
const (
pi = 3.14
foo = 42
bar = "hello"
)
상수 사용 방법에 따라 두 가지 옵션이 있습니다.
첫 번째
유형MyFlag
이있을 것이다 :,
type MyFlag int
const (
Foo MyFlag = 1
Bar
)
Foo
및 Bar
을 예컨대을 INT에 따라 새로운 유형을 생성하고,이 새로운 유형을 사용하여 상수를 선언하는 것입니다. 당신이 MyFlag
에서 다시 int 값을 추출 할 경우에는 형 coersion 필요 :이 불편하면
var i int = int(Bar)
을 베어 CONST 블록의 사용 newacct의 제안 :
const (
Foo = 1
Bar = 2
)
Foo
및 Bar
int, float 등등에 할당 할 수있는 완벽한 상수입니다.
이것은 상수 섹션의 Effective Go에서 다룹니다. C/C++와 같은 값의 자동 할당에 대한 iota
키워드에 대한 설명도 참조하십시오.
첫 번째 예에서는 Bar가 유형이 지정되지 않았습니다. 할당의 오른쪽이 비어있는 경우에만 Foo의 유형을 선택합니다.이 경우 iota를 사용하는 것이 옳습니다. –
@Evan 고맙습니다. 답을 게시하기 전에 예제를 테스트했지만, 어쨌든 여분의 과제가 거기에 터졌습니다. – lnmx
의도했는지 여부는 확실하지 않지만 같은 값과 유형이 있습니다. –
이 그룹화로 달성하고자하는 대상에 따라 다릅니다. 단지 프로그래머 (편집자 접 수)에 대한 좋은 시각 블록을 추가하지만 (당신이 블록의 이름을 지정할 수 없습니다) 컴파일러를 위해 아무것도하지 않는
const (
c0 = 123
c1 = 67.23
c2 = "string"
)
: 이동은 다음 괄호 구문을 그룹화 허용 .
이 블록에 의존하는 유일한 것은 Go에있는 iota constant declaration입니다 (이는 enums에 매우 유용합니다). 자동 증분을 쉽게 만들 수 있습니다 (자동 증분보다 더 많은 점이 있습니다 : 링크의 자세한 내용). (3 + 5 * 0) c0 = 3
c1 = 8
(3 + 5 * 1) c2 = 13
(2 * 3 + 5) 상수를 생성한다
const (
c0 = 3 + 5 * iota
c1
c2
)
예를 들어이
.
가장 가까운 열거 형 접근 방식은 상수를 유형으로 선언하는 것입니다. 최소한 enum 유형의 주요 특권 인 유형 안전성을 가지고 있습니다.
type PoiType string
const (
Camping PoiType = "Camping"
Eatery PoiType = "Eatery"
Viewpoint PoiType = "Viewpoint"
)
이러한 블록에는 이름이 있습니까? –
@Darius : no :-(어쨌든 이것은 그룹화하지 않습니다. –
모든 상수에 동일한 사용자 정의 유형을 지정하면 블록에 이름을 붙일 수 있습니다 .Imx가 MyFlag에서 수행하려고하는 것과 비슷합니다 예 : –