Go에서 Enum을 정의할 때의 우려 사항
4878 단어 Go
Go에는 기본 Enum 정의 메커니즘이 없으므로 일반적으로
const
선언에서 다음과 같이 정의됩니다.type Type int
const (
a Type = iota
b
c
)
그러나 Go에서 변수를 초기화할 때 값 Zero-Value 을 명확하게 대입하지 않으면 기본적으로 할당된 값이 결정됩니다.예를 들어, 유형 변수는 "0"입니다.그리고
iota
는 "0"에서 시작하는 연속 정수를 생성하는 식별자이기 때문에 위에서 설명한 int
이 기본값이지 않으면 변수를 초기화할 때 명확한 지정값이 없어도 기본값이 아닌 iota
상태가 발생합니다.나는 문장에서 전달하기가 좀 어렵다고 생각해서 코드로 표시하면
type S struct {
T Type
}
func main() {
s := S{}
switch s.T {
case a:
fmt.Println("a") // <- 実際にはここを通る
case b:
fmt.Println("b")
case c:
fmt.Println("b")
default:
fmt.Println("default") // <- s.T に何も設定していなかったらここを通ってほしい
}
}
이런 경우"1"부터 이 문제를 해결할 수 있습니다
a
.이 점은 쓸데없는 일에 참견하기 때문에 다음과 같은 의도로 처리할 것이다.const (
a Type = iota + 1 // <- 1から始める
b
c
)
func main() {
s := S{}
switch s.T {
case a:
fmt.Println("a")
case b:
fmt.Println("b")
case c:
fmt.Println("b")
default:
fmt.Println("default") // <- s.T に何も設定していないのでここを通る!
}
}
다만 이 해결 방안이 가장 좋은지, 더 좋은 방안이 있는지 모르겠다.이런 분은 댓글란으로 오세요.
Reference
이 문제에 관하여(Go에서 Enum을 정의할 때의 우려 사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/cia_rana/items/9d00ce81252ed970f362텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)