>  기사  >  golang 열거형은 무엇을 의미하나요?

golang 열거형은 무엇을 의미하나요?

DDD
DDD원래의
2023-06-06 11:53:261020검색

Golang 열거형은 일련의 키-값 쌍으로 구성된 중요한 데이터 유형으로, 일반적으로 프로그래밍 언어에서 상수 식별자로 사용됩니다. 이는 C, Java 등과 같은 널리 사용되는 주요 프로그래밍 언어에서 기본적으로 지원됩니다. 프로그래밍 분야에서 열거형은 제한된 수의 고정 값만 포함하는 유형을 나타내는 데 사용되며 일반적으로 오류 코드나 상태 머신을 식별하는 데 사용됩니다.

golang 열거형은 무엇을 의미하나요?

이 기사의 운영 환경: Windows 10 시스템, go1.20 버전, dell g3 컴퓨터.

열거형은 일련의 키-값 쌍으로 구성된 중요한 데이터 유형이며 일반적으로 프로그래밍 언어에서 상수의 식별자로 사용됩니다. C, Java 등과 같은 모든 주요 인기 프로그래밍 언어는 기본적으로 지원됩니다. Go에서는 열거형 유형을 선언하는 데 직접 사용되는 열거형이나 기타 키워드를 찾을 수 없습니다. 다른 프로그래밍 언어에 익숙하고 Go 프로그래밍으로 전환하는 개발자에게는 처음에는 이러한 상황을 받아들이기가 더 어려울 것입니다. 실제로 Go에서 열거형 유형이 어떻게 표현되는지 보면 Go 언어 디자이너가 일반 주니어 엔지니어와 비교할 수 없을 정도로 단순성과 문제를 깊이 고려했다는 것을 느낄 수 있습니다. 프로그래밍 분야에서 열거형은 제한된 수의 고정 값만 포함하는 유형을 나타내는 데 사용됩니다. 열거형은 일반적으로 오류 코드나 상태 기계를 식별하기 위해 개발에 사용됩니다.

사실 Go 언어 디자이너의 눈에는 enum이 본질적으로 상수인 것으로 보입니다. 왜 추가 키워드가 있는 걸까요? go에는 enum 키워드가 없고, 열거형을 표현하는 방식도 다른 언어와 크게 다르지 않습니다. Go에서 열거형을 표현하는 방법을 살펴보겠습니다.

언어를 배우고 사용한다는 것은 언어 자체의 디자인 철학을 배우고 이해하는 동시에 디자이너의 성격 특성도 느끼게 됩니다.

기본 작업

다음 설명의 편의를 위해 먼저 go 모듈을 사용하여 간단한 프로젝트를 생성합니다.

~/Projects/go/examples  
➜  mkdir enum  
~/Projects/go/examples  
➜  cd enum  
~/Projects/go/examples/enum  
➜  go mod init enum  
go: creating new go.mod: module enum  
~/Projects/go/examples/enum  
➜  touch enum.go

const + iota

시작, 실행, 중지의 세 가지 상태를 예로 들어 const 키를 사용하여 일련의 상수 값을 선언합니다. enum.go에 다음 내용을 작성하세요.

package main  
import "fmt"  
const (  
    Running int = iota  
    Pending  
    Stopped  
)  
func main() {  
    fmt.Println("State running: ", Running)  
    fmt.Println("State pending: ", Pending)  
    fmt.Println("State Stoped: ", Stopped)  
}

저장하고 실행하면 다음과 같은 결과를 얻을 수 있습니다.

~/Projects/go/examples/enum   
➜  go run enum.go  
State running:  0  
State pending:  1  
State Stoped:  2

무슨 일이 일어났는지 설명하기 전에 먼저 iota를 살펴보겠습니다. C 및 Java와 비교하여 Go는 상수를 선언할 때 상수에 값을 지속적으로 할당하는 상수 카운터인 iota를 제공합니다.

예를 들어 이 예에서는

const (  
    a int = iota // a = 0  
    b int = iota // b = 1  
    c int = iota // c = 2  
)  
const d int = iota // d = 0

const 선언 블록에서 iota의 초기값은 0이고, 변수가 선언될 때마다 1씩 증가합니다. 위 코드는 다음과 같이 단순화될 수 있습니다.

const (  
    a int = iota // a = 0  
    b // b = 1  
    c // c = 2  
)  
const d int = iota // d = 0

이때 50개 또는 100개의 상수가 있고 C 및 Java 언어로 작성되면 어떤 일이 발생할지 상상해 보세요.

iota와 관련하여 더 구체적인 기술(예: 홉 수)이 있습니다. 자세한 내용은 iota의 공식 정의를 참조하세요.

const를 사용하여 일련의 상수를 정의하고 iota 상수 카운터를 사용하여 숫자형 상수에 값을 빠르고 연속적으로 할당하는 것이 매우 편리합니다. enum 키워드는 없지만 이 경우 열거형은 본질적으로 상수의 조합입니다.

물론, 다음 방법을 사용하여 다른 언어의 열거형에 더 가까워질 수 있습니다.

// enum.go  
...  
type State int  
const (  
    Running State = iota  
    Pending  
    Stopped  
)  
...

상수 값 집합을 유형 별칭으로 래핑하는 것이 enum {} 정의와 더 유사합니다. 다른 언어?

위의 예를 다음과 같이 변경할 수도 있습니다.

// enum.go  
...  
type State int 
const (  
    Running State = iota  
    Pending  
    Stopped  
)  
func (s State) String() string {  
    switch s {  
    case Running:  
        return "Running"  
    case Pending:  
        return "Pending"  
    case Stopped:  
        return "Stopped"  
    default:  
        return "Unknown" 
     }  
}  
...

정의된 열거 유형에 문자열 함수를 추가하면 실행 결과는 다음과 같습니다.

~/Projects/go/examples/enum   
➜  go run enum.go  
State running:  Running  
State pending:  Pending  
State Stoped:  Stopped

마법적이지 않나요? 생각이 넓어질 것입니다. , 그리고 당신은 통찰력을 얻을 것입니다. 인쇄된 문자에서 실제 값을 분리하는 것은 대부분의 언어 디자이너가 생각하지 않는 것입니다. 이것을 보면 이런 느낌이 드시나요? Go 언어의 디자이너는 게으른 게 아니라, 게으르기 위해 많은 생각과 노력을 했습니다.

위 내용은 golang 열거형은 무엇을 의미하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.