Go에서 복잡한 구조 계층의 관용적 구현
Go의 상속 및 임베딩 지원 부족으로 인해 복잡한 구조 계층 표현이 쉽지 않습니다. . AST 구현에서 Go 컴파일러의 빈 메소드 사용은 그 효율성에 대한 의문을 불러일으켰습니다.
빈 메소드 이해
필수는 아니지만 빈 메소드는 두 가지 주요 목적을 수행합니다.
활용 임베딩
임베딩을 사용하면 구조체가 다른 구조체의 필드와 메서드를 통합하여 상속 형태를 만들 수 있습니다. 적절한 구조체를 계층적 방식으로 포함함으로써 빈 메소드의 필요성을 줄일 수 있습니다.
객체-이동 가능-이동 가능 계층
다음 계층을 고려하세요.
Object --Immovable ----Building ----Mountain --Movable ----Car ----Bike
객체 구현:
type Object interface { object() } type ObjectImpl struct {} func (o *ObjectImpl) object() {}
이동식 구현:
type Immovable interface { Object immovable() } type ImmovableImpl struct { ObjectImpl // Embedded Object implementation } func (i *ImmovableImpl) immovable() {}
구현 구축:
type Building struct { ImmovableImpl // Embedded Immovable implementation // Additional Building-specific fields }
이동 가능 구현:
type Movable interface { Object movable() } type MovableImpl struct { ObjectImpl // Embedded Object implementation } func (m *MovableImpl) movable() {}
자동차 구현:
type Car struct { MovableImpl // Embedded Movable implementation // Additional Car-specific fields }
사용 예:
// Building cannot be assigned to a Movable-typed variable because it does not implement the Movable interface. var movable Movable = Building{} // However, it can be assigned to an Object-typed variable because both Immovable and Movable implement Object. var object Object = Building{}
장점 임베딩:
위 내용은 Go에서 임베딩을 통해 복잡한 구조적 계층 구현을 어떻게 개선할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!