찾다
백엔드 개발GolangGo에서 ENUM 마스터하기

Mastering ENUMs in Go

우리가 개발하는 시스템 내에서 우리는 종종 변함없는 가치를 마주하게 됩니다. 이러한 값의 한 가지 예는 등록 상태를 나타내는 것일 수 있습니다. 이 경우 활성 및 비활성을 넘어 더 많은 변형이 포함된 상태를 고려하세요.

이러한 상태가 문자열로 정의되면 시스템 내에서 해당 상태를 확인하는 것이 큰 골칫거리가 될 수 있습니다. 또한 각 검증에는 두 개의 문자열(예상 값과 검증되는 값)이 포함되므로 이 접근 방식은 바이너리를 "팽창"할 수 있습니다.

이러한 문제를 방지하려면 잘 알려진 열거형 유형을 사용할 수 있습니다. 이 유형이 낯설다면 기본적으로는 고정형이거나 제한된 크기의 유형입니다.

더 명확하게 설명하기 위해 몇 가지 코드를 살펴보겠습니다. 앞서 제시한 아이디어에 따라 등록 상태를 확인하는 열거형 유형을 생성하겠습니다.

새 유형 정의

Go의 표준 유형을 기반으로 열거형을 만드는 것은 문제가 될 수 있습니다. 설명하겠습니다. 상태를 uint8 유형으로 정의한다고 상상해 보세요. 이제 우리 시스템에 장르에 대한 uint8 유형의 또 다른 열거형이 있다고 가정해 보겠습니다.

이제 값 1이 보류 상태와 컨트리 음악 장르를 모두 나타낸다고 가정해 보겠습니다. Pending == Country인 경우 유효성 검사를 수행하면 어떻게 되나요? 정확히 말하면 true가 반환됩니다.

이를 방지하기 위해 특별히 상태 처리를 위한 새로운 유형을 만들겠습니다. 이 유형은 uint8을 기반으로 하지만 고유한 유형이므로 앞서 언급한 유효성 검사에서는 true를 반환하지 않습니다.

type Status uint8

ENUM 생성

새 유형을 정의한 후 등록 상태에 대한 상수와 해당 값을 생성해 보겠습니다.

const (
  Created Status = 0
  Pending = 1
  Approved = 2
  Rejected = 3
)

위처럼 값을 할당하는 데 본질적으로 잘못된 것은 없지만 더 간단한 방법이 있습니다. 각 상수에 값을 할당하는 대신 iota 키워드를 사용할 수 있습니다. 이 키워드는 Go가 첫 번째 상수에 0을 할당한 다음 각 후속 상수에 대해 순차적으로 값을 1씩 증가시키도록 합니다.

const (
  Created Status = iota
  Pending
  Approved
  Rejected
)

ENUM 인쇄

현재 열거형이 구현되어 있으므로 Created 상수를 인쇄하면 값 0이 표시됩니다. 그러나 더 나은 가독성을 위해 값 0 대신 Created라는 단어를 표시하는 것이 더 도움이 됩니다.

해결책은 매우 간단합니다. 마법의 String() 메소드를 구현하면 됩니다.

func (s Status) String() string {
  switch s {
    case Created:
      return "created"
    case Pending:
      return "pending"
    case Approved:
      return "approved"
    case Rejected:
      return "rejected"
   }

   return "unknown"
}

결론

이를 테스트하기 위해 보류 상태를 간단히 인쇄해 보겠습니다.

package main

import "fmt"

type Status uint8

const (
  Created Status = iota
  Pending
  Approved
  Rejected
)

func (s Status) String() string {
  switch s {
    case Created:
      return "created"
    case Pending:
      return "pending"
    case Approved:
      return "approved"
    case Rejected:
      return "rejected"
  }

  return "unknown"
}

func main() {
  fmt.Println(Pending)
}

go run 명령을 실행하면 터미널에 보류 중이 출력되어야 합니다.

그렇습니다! 도움이 되었기를 바랍니다.

다음에 또 만나요!

위 내용은 Go에서 ENUM 마스터하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Golang과 Python 사이의 선택 : 프로젝트에 적합한 올바른Golang과 Python 사이의 선택 : 프로젝트에 적합한 올바른Apr 19, 2025 am 12:21 AM

golangisidealferperperferferferferformance-criticalapplications 및 concurrentprogramming, whilepythonexcelsindatascience, 빠른 프로토 타입, 및 범위

골랑 : 동시성과 행동의 성능골랑 : 동시성과 행동의 성능Apr 19, 2025 am 12:20 AM

Golang은 Goroutine 및 Channel을 통해 효율적인 동시성을 달성합니다. 1. Goroutine은 가벼운 스레드이며 GO 키워드로 시작합니다. 2. 채널은 경주 조건을 피하기 위해 고루틴 간의 안전한 통신에 사용됩니다. 3. 사용 예제는 기본 및 고급 사용법을 보여줍니다. 4. 일반적인 오류에는 교착 상태와 데이터 경쟁이 포함되며 Gorun-Race가 감지 할 수 있습니다. 5. 성능 최적화는 채널 사용을 줄이고, 고 루틴 수를 합리적으로 설정하고, sync.pool을 사용하여 메모리를 관리하는 것을 제안합니다.

Golang vs. Python : 어떤 언어를 배워야합니까?Golang vs. Python : 어떤 언어를 배워야합니까?Apr 19, 2025 am 12:20 AM

Golang은 시스템 프로그래밍 및 높은 동시성 응용 프로그램에 더 적합한 반면 Python은 데이터 과학 및 빠른 개발에 더 적합합니다. 1) Golang은 Google에 의해 개발되어 정적으로 입력하여 단순성과 효율성을 강조하며 동시성 시나리오에 적합합니다. 2) Python은 Guidovan Rossum, 동적으로 입력, 간결한 구문, 광범위한 응용 프로그램, 초보자 및 데이터 처리에 적합합니다.

Golang vs. Python : 성능 및 확장 성Golang vs. Python : 성능 및 확장 성Apr 19, 2025 am 12:18 AM

Golang은 성능과 확장 성 측면에서 Python보다 낫습니다. 1) Golang의 컴파일 유형 특성과 효율적인 동시성 모델은 높은 동시성 시나리오에서 잘 수행합니다. 2) 해석 된 언어로서 파이썬은 천천히 실행되지만 Cython과 같은 도구를 통해 성능을 최적화 할 수 있습니다.

Golang 대 기타 언어 : 비교Golang 대 기타 언어 : 비교Apr 19, 2025 am 12:11 AM

Go Language는 동시 프로그래밍, 성능, 학습 곡선 등의 고유 한 장점을 가지고 있습니다. 1. 동시 프로그래밍은 가볍고 효율적인 Goroutine 및 채널을 통해 실현됩니다. 2. 컴파일 속도는 빠르며 작동 속도는 작동 성능이 C 언어의 성능에 가깝습니다. 3. 문법은 간결하고 학습 곡선은 매끄럽고 생태계는 풍부합니다.

Golang과 Python : 차이점을 이해합니다Golang과 Python : 차이점을 이해합니다Apr 18, 2025 am 12:21 AM

Golang과 Python의 주요 차이점은 동시성 모델, 유형 시스템, 성능 및 실행 속도입니다. 1. Golang은 동시 작업에 적합한 CSP 모델을 사용합니다. Python은 I/O 집약적 인 작업에 적합한 멀티 스레딩 및 Gil에 의존합니다. 2. Golang은 정적 유형이며 Python은 동적 유형입니다. 3. Golang 컴파일 된 언어 실행 속도는 빠르며 파이썬 해석 언어 개발은 ​​빠릅니다.

Golang vs. C : 속도 차이 평가Golang vs. C : 속도 차이 평가Apr 18, 2025 am 12:20 AM

Golang은 일반적으로 C보다 느리지 만 Golang은 동시 프로그래밍 및 개발 효율에 더 많은 장점이 있습니다. 1) Golang의 쓰레기 수집 및 동시성 모델은 높은 동시 시나리오에서 잘 수행합니다. 2) C는 수동 메모리 관리 및 하드웨어 최적화를 통해 더 높은 성능을 얻지 만 개발 복잡성이 높습니다.

Golang : 클라우드 컴퓨팅 및 DevOps의 핵심 언어Golang : 클라우드 컴퓨팅 및 DevOps의 핵심 언어Apr 18, 2025 am 12:18 AM

Golang은 클라우드 컴퓨팅 및 DevOps에서 널리 사용되며 장점은 단순성, 효율성 및 동시 프로그래밍 기능에 있습니다. 1) 클라우드 컴퓨팅에서 Golang은 Goroutine 및 채널 메커니즘을 통해 동시 요청을 효율적으로 처리합니다. 2) DevOps에서 Golang의 빠른 편집 및 크로스 플랫폼 기능이 자동화 도구의 첫 번째 선택입니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

mPDF

mPDF

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

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구