Go에서 열거형을 작성하는 방법과 이유
게시물How and Why to Write Enums in Go은 Qvault에 처음 등장했습니다.
enumerator 의 줄임말인 enum 은 명명된 상수 값 집합입니다. 열거형은 개발자가 유용한 이름을 가지면서도 단순하고 고유한 값을 갖는 복잡한 상수 집합을 만들 수 있는 강력한 도구입니다.
구문 예
상수 선언 내에서
iota
키워드는 유형이 지정되지 않은 연속 정수 상수를 나타냅니다.type BodyPart int
const (
Head BodyPart = iota // Head = 0
Shoulder // Shoulder = 1
Knee // Knee = 2
Toe // Toe = 3
)
열거형을 사용해야 하는 이유는 무엇입니까?
값이 0인 Head라는 정수 상수가 필요한 이유는 무엇입니까? 그렇다면 const Head = 0 을 사용할 수 없습니까?
예, 그렇게 할 수 있지만 열거형은 상수 집합을 그룹화하고 고유한 값을 보장하는 방식에서 강력합니다. 열거형을 사용하면 컴파일러에서 그룹의 상수(
Head
, Shoulder
, Knee
및 Toe
)가 동일한 값을 가지지 않도록 합니다.문자열을 사용하지 않는 이유는 무엇입니까? const 머리 = "머리" 및 const 어깨 = "어깨" ?
고유성을 보장하지 않는 컴파일러의 중복 응답 외에도 문자열도 과도할 수 있습니다. 4개, 10개 또는 100개의 고유한 값으로 구성된 그룹이 있는 경우 전체
string
를 저장해야 합니까? 작음int
은 프로그램의 메모리 공간에서 더 적은 공간을 차지합니다.특히 최신 하드웨어가 얼마나 강력한지 공간에 관한 것만은 아닙니다. 다음 예와 같은 일부 구성 변수가 있다고 가정해 보겠습니다.
const (
statusSuccess = iota
statusFailed
statusPending
statusComplete
)
이제 코드베이스의 나머지 부분과 일관성을 유지하기 위해
statusFailed
의 이름을 statusCancelled
로 변경해야 한다고 가정합니다. 이전에 열거형 대신 문자열 값failed
을 사용했는데 이제 해당 값이 시스템의 다양한 데이터베이스와 파일에 흩어져 있는 경우 변경하기가 정말 어려워집니다. 방금 enum
를 사용한 경우 혼란을 주지 않고 이름을 변경할 수 있습니다.1부터 시작하는 열거형
때때로 당신이 마조히스트이거나 아마도 Lua 개발자라면 열거형 목록이 기본값
1
대신 0
값으로 시작하기를 원할 것입니다.const (
Head = iota + 1 // 1
Shoulder // 2
Knee // 3
Toe // 4
)
승수가 있는 열거형
iota
키워드는 단순히 const
블록 내에서 사용될 때마다 하나 더 큰 숫자가 증가하는 정수 상수를 나타냅니다. 원하는 수학을 수행하는 데 사용할 수 있습니다.const (
Head = iota + 1 // 0 + 1 = 1
Shoulder = iota + 2 // 1 + 2 = 3
Knee = iota * 10 // 2 * 10 = 20
Toe = iota * 100 // 3 * 100 = 300
)
이를 염두에 두고 할 수 있다고 해서 반드시 해야 한다는 의미는 아님을 기억하십시오.
값을 건너뛰는 열거형
값을 건너뛰려면 반환 변수를 무시하는 것처럼
_
문자를 사용하십시오.const (
Head = iota // 0
_
Knee // 1
Toe // 2
)
Go의 문자열 열거형
Go에는 열거형에 대한 내장 기능
string
이 없지만 깨끗한String()
메서드를 간단히 구현하는 것은 매우 쉽습니다. 상수 자체를 문자열 유형으로 설정하는 대신 String()
메서드를 사용하면 문자열의 "인쇄 가능성"과 함께 enum과 동일한 이점을 얻을 수 있습니다.type BodyPart int
const (
Head BodyPart = iota // Head = 0
Shoulder // Shoulder = 1
Knee // Knee = 2
Toe // Toe = 3
)
func (bp BodyPart) String() string {
return [...]string{"Head", "Shoulder", "Knee", "Toe"}
}
그러나이 접근 방식에는 몇 가지 "고장"이 있으므로주의하십시오.
const
블록의 선언 수가 String()
메서드에서 생성된 "constant slice "의 항목 수와 다른 경우 컴파일러는 잠재적인 "범위를 벗어난"오류에 대해 경고하지 않습니다. 또한 상수 중 하나의 이름을 업데이트하는 경우 목록에서 해당 문자열을 업데이트하는 것을 잊지 마십시오.읽어 주셔서 감사합니다. 이제 과정을 수강하십시오!
기술 분야의 고임금 직업에 관심이 있으십니까? 실습 코딩 과정을 마친 후 인터뷰를 시작하고 멋지게 통과합니다.
Start coding now
질문?
질문이나 의견이 있으면 트위터에서 나를 팔로우하고 연락하십시오. 기사에서 실수를 한 경우 반드시 let me know 수정하여 수정할 수 있도록 해주세요!
Subscribe 받은 편지함으로 바로 전달되는 더 많은 코딩 기사를 보려면 내 뉴스레터로 보내십시오.
Reference
이 문제에 관하여(Go에서 열거형을 작성하는 방법과 이유), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bootdotdev/how-and-why-to-write-enums-in-go-1lmb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)