열거형이란 무엇입니까?
열거(enumeration)의 약자인 열거(enum)는 명명된 값 집합을 나타내는 특수 데이터 유형입니다. 개념적으로 관련된 상수 값의 집합을 정의하여 코드 가독성을 높이고 임의 리터럴 값 사용으로 인해 발생하는 오류를 줄이는 데 사용됩니다.
// Enum in Java enum TrafficLight { RED, YELLOW, GREEN }
# Enum in Python from enum import Enum class TrafficLight(Enum): RED = 1 GREEN = 2 BLUE = 3
Go의 열거형
Go는 기본적으로 enum을 지원하지 않습니다. 그러나 Go에서 열거형을 정의하는 인기 있는 방법은 iota 접근 방식을 사용하는 것입니다.
package main type TrafficLight int const ( RED TrafficLight = iota // 0 GREEN // 1 BLUE // 2 ) func main() { fmt.Println(RED) // Output: 0 }
그러나 이 방법으로 enum을 처리할 때 몇 가지 문제가 있습니다.
- 내장 메소드 부족: 모든 열거형 값 나열 또는 문자열과 열거형 간의 변환과 같은 기능을 직접 지원하지 않습니다.
- 제한된 유형 안전성: 열거형은 일반적으로 기본 유형(예: int 또는 문자열)을 사용하여 표현되므로 의도하지 않은 할당의 위험이 증가합니다.
- 직렬화 및 역직렬화 복잡성: JSON과 같은 형식 간에 열거형을 매핑하려면 추가 처리가 필요합니다.
xybor-x/enum 라이브러리
xybor-x/enum 라이브러리는 코드 생성 없이 Go enum을 위한 우아하고 사용하기 쉽고 강력한 솔루션을 제공합니다.
xybor-x/enum으로 작업할 수 있는 몇 가지 유형의 열거형이 있습니다. 가장 적합한 유형을 선택하세요.
기본 열거형
장점?
- 간단합니다.
- 상수 값을 지원합니다.
단점?
- 내장된 메소드가 없습니다.
- 유형 안전이 없습니다.
- 직렬화 및 역직렬화 지원이 부족합니다. 기존 열거형과 마찬가지로 기본 열거형에는 내장 메서드가 없습니다. 그러나 xybor-x/enum의 유틸리티 기능을 사용하여 이러한 유형의 열거형을 처리할 수 있습니다.
package main type Role int const ( RoleUser Role = iota RoleAdmin ) func init() { enum.Map(RoleUser, "user") enum.Map(RoleAdmin, "admin") // Optional: ensure no new enum values can be added to Role. enum.Finalize[Role]() } func main() { // Print the corresponding string. fmt.Println(enum.ToString(RoleUser)) // Output: user // Print out all valid enums. fmt.Println(enum.All[Role]()) // Output: [0 1] // Parse an enum from int. r1, ok := enum.FromInt[Role](1) fmt.Println(ok) // Output: true fmt.Println(enum.ToString(r1)) // Output: admin // Parse an enum from string. r2, ok := enum.FromString[Role]("admin") fmt.Println(ok) // Output: true fmt.Println(r2) // Output: 1 // Serialize json. data, err := enum.MarshalJSON(RoleUser) fmt.Println(err) // Output: nil fmt.Println(string(data)) // Output: "user" }
WrapEnum
장점?
- 상수 값을 지원합니다.
- 다양한 유용한 내장 메소드를 제공합니다.
- 직렬화 및 역직렬화가 즉시 지원됩니다.
단점?
- 기본형 안전만 제공합니다.
package main // Only need to change the two following lines fromthe Basic enum. type role any type Role = enum.WrapEnum[role] const ( RoleUser Role = iota RoleAdmin ) func init() { enum.Map(RoleUser, "user") enum.Map(RoleAdmin, "admin") // Optional: ensure no new enum values can be added to Role. enum.Finalize[Role]() } func main() { // Print the corresponding string. No need to use enum.ToString. fmt.Println(RoleUser) // Output: user // Print out all valid enums. fmt.Println(enum.All[Role]()) // Output: [user admin] // Parse an enum from int. r1, ok := enum.FromInt[Role](1) fmt.Println(ok) // Output: true fmt.Println(r1) // Output: admin // Parse an enum from string. r2, ok := enum.FromString[Role]("admin") fmt.Println(ok) // Output: true fmt.Println(r2) // Output: admin // Now you can use json.Marshal instead of enum.MarshalJSON. data, err := json.Marshal(RoleUser) fmt.Println(err) // Output: nil fmt.Println(string(data)) // Output: "user" }
WrapEnum은 일반적인 경우에 가장 적합한 열거형입니다. 그러나 기본 유형 안전성만 제공합니다. 더 엄격한 것을 원한다면 SafeEnum 사용을 고려해 보세요.
// WrapEnum cannot prevent this type of invalid declaration. // Consider using SafeEnum. r := Role(42)
SafeEnum
SafeEnum은 강력한 유형 안전 열거형을 정의합니다. WrapEnum과 마찬가지로 열거형 작업을 단순화하기 위한 내장 메소드 세트를 제공합니다.
SafeEnum은 엄격한 유형 안전성을 적용하여 사전 정의된 열거형 값만 허용되도록 합니다. 이는 새로운 열거형 유형이 실수로 생성되는 것을 방지하여 유효한 값 집합을 보장합니다.
장점?
- 강력한 타입 안전성을 제공합니다.
- 다양한 유용한 내장 메소드를 제공합니다.
- 직렬화 및 역직렬화가 즉시 지원됩니다.
단점?
- 상수값을 지원하지 않습니다.
지속적인 지원이 왜 중요한가요?
일부 정적 분석 도구(예: bazel용 nogo, 전체 확장이 포함된 golangci-lint)는 상수 열거형에서 전체 스위치 문 검사를 지원합니다. 지속적인 지원을 받는 열거형을 선택하면 이러한 도구에서 이 기능을 활성화할 수 있습니다.
// Enum in Java enum TrafficLight { RED, YELLOW, GREEN }
참고자료
xybor-x/enum: https://github.com/xybor-x/enum
매체: https://medium.com/@huykingsofm/enum-handling-in-go-a2727154435e
베트남어 viblo: https://viblo.asia/p/cac-van-de-cua-go-enum-va-cach-giai-quyet-voi-xybor-xenum-Yym401A9J91
위 내용은 xybor-x/enum을 사용한 Go Enum의 문제와 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Go의 "Strings"패키지는 문자열 작동 효율적이고 간단하게 만드는 풍부한 기능을 제공합니다. 1) STRINGS.CONTAINS ()를 사용하여 하위 문자열을 확인하십시오. 2) strings.split ()를 사용하여 데이터를 구문 분석 할 수 있지만 성능 문제를 피하기 위해주의해서 사용해야합니다. 3) strings.join ()은 문자열 서식에 적합하지만 작은 데이터 세트의 경우 루핑 =가 더 효율적입니다. 4) 큰 문자열의 경우 문자열을 사용하여 문자열을 만드는 것이 더 효율적입니다.

Go는 문자열 작업에 "Strings"패키지를 사용합니다. 1) splice strings에 strings.join 기능을 사용하십시오. 2) 문자열을 사용하여 기능을 포함하여 하위 문자열을 찾으십시오. 3) 문자열을 사용하십시오. 이러한 기능은 효율적이고 사용하기 쉽고 다양한 문자열 처리 작업에 적합합니다.

the byteSpackageOsestementialforeficientsliceManipulation, ontowerfunctionslikecececectains, index, andreplaceforsearching 및 modifyingbinaryData.ItenHancesBinaryData, MakingIvitalToolforHandlingBinaryData, NetworkProtocols 및 filei

Go는 이진 인코딩 및 디코딩을 위해 "인코딩/이진"패키지를 사용합니다. 1)이 패키지는 binary.wart.write 및 binary.Read 기능을 작성하고 읽기 데이터를 제공합니다. 2) 올바른 엔디언 (예 : Bigendian 또는 Littleendian)을 선택하는 데주의를 기울이십시오. 3) 데이터 정렬 및 오류 처리도 데이터의 정확성과 성능을 보장하는 핵심입니다.

"바이트"PackageOffersefficientFunctionSformanipulatingByteslices.1) audeBytes.joinforconcateNatingSlices, 2) bytes.bufferforIncrementalWriting, 3) bytes.indexorBytes.IndexByTeForsearching, 4) bytes.ReaderReadingInCunks, 및 5) thepliteTor

theencoding/binarypackageingofectiveficizatebinaryoperationsduetoitssupportforendiannessandefficientdatahandling.toenhanceperformance : 1) usebinary.nativeBinary.nativeBinary.nativeBinary.nativeEndianFornativeendiannesstoavoidByteswapping.2) BatchReadandWriteOperationStoredUtei/over

GO의 바이트 패키지는 주로 바이트 슬라이스를 효율적으로 처리하는 데 사용됩니다. 1) Bytes를 사용하여 Buffer는 불필요한 메모리 할당을 피하기 위해 스트링 스 플라이 싱을 효율적으로 수행 할 수 있습니다. 2) BYTES.Equal 함수는 바이트 슬라이스를 빠르게 비교하는 데 사용됩니다. 3) bytes.index, bytes.split 및 bytes.replaceall 함수를 사용하여 바이트 슬라이스를 검색하고 조작 할 수 있지만 성능 문제에주의를 기울여야합니다.

바이트 패키지는 바이트 슬라이스를 효율적으로 처리하기위한 다양한 기능을 제공합니다. 1) 바이트 시퀀스를 확인하려면 바이트를 사용하십시오. 2) 바이트 슬라이스를 분할하려면 BYTES.SPLIT를 사용하십시오. 3) 바이트 시퀀스 바이트를 교체하십시오. 4) Bytes.join을 사용하여 여러 바이트 슬라이스를 연결하십시오. 5) Bytes.Buffer를 사용하여 데이터를 작성하십시오. 6) 오류 처리 및 데이터 검증을 위해 결합 된 바이트.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

WebStorm Mac 버전
유용한 JavaScript 개발 도구