>백엔드 개발 >Golang >Go에서 Union을 어떻게 효과적으로 시뮬레이션할 수 있나요?

Go에서 Union을 어떻게 효과적으로 시뮬레이션할 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-12-22 21:50:20108검색

How Can We Effectively Simulate Unions in Go?

Go에서 유니온 모범 사례

Go에는 프로그래밍에서 어디에나 존재하는 특성에도 불구하고 유니온이 부족합니다. 이러한 누락된 기능을 해결하기 위해 다양한 접근 방식이 등장했습니다.

일반적인 접근 방식 중 하나는 공용체에서 가능한 각 유형에 대해 별도의 구조체를 정의하고 해당 구조체 중 하나를 컨테이너 인터페이스 내에 저장하는 것입니다. 이 방법은 유형 안전성을 제공하지만 상당한 코드 중복성을 도입합니다. 제공된 예에서 볼 수 있듯이 공용체의 각 유형에는 수많은 생성자, 조건자 및 getter 함수가 필요합니다.

이러한 중복성을 완화하려면 개체를 공용체에 속하는 것으로 표시하는 인터페이스 정의를 고려하세요. 이를 통해 나중에까지 구체적인 유형을 지정하지 않고도 함수가 기타 요소에 대해 작동할 수 있습니다.

예:

type Misc interface {
    ImplementsMisc()
}

type Comment Chars
func (c Comment) ImplementsMisc() {}

type ProcessingInstruction
func (p ProcessingInstruction) ImplementsMisc() {}

이 접근 방식을 사용하면 함수는 일반적으로 기타 개체를 처리할 수 있습니다.

func HandleMisc(m Misc) {
    switch m.(type) {
        case Comment:
            fmt.Println("It's a comment")
        case ProcessingInstruction:
            fmt.Println("It's a processing instruction")
    }
}

이 방법은 어느 정도 단순화를 제공하지만 실제 유형에 액세스하려면 여전히 유형 어설션이 필요합니다. object.

진정한 공용체를 모방하기 위해 제공된 예는 선호되는 접근 방식을 나타냅니다. 그러나 코드 중복이 발생합니다. 불행하게도 Go에서는 이 프로세스를 단순화하는 보편적으로 받아들여지는 방법이 없습니다.

위 내용은 Go에서 Union을 어떻게 효과적으로 시뮬레이션할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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