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 중국어 웹사이트의 기타 관련 기사를 참조하세요!