구조 삽입: 포인터를 선호하는 경우
한 구조체를 다른 구조체 안에 삽입할 때 포인터 사용 또는 삽입 값 사용이라는 두 가지 옵션이 있습니다. . 이 결정을 내리려면 사양을 이해하고 각 접근 방식의 장점을 고려하는 것이 중요합니다.
포인터와 내장된 값
Go 사양에 따르면 익명 필드(포함된 필드라고도 함)는 유형 이름 또는 비인터페이스 유형 이름에 대한 포인터로 선언될 수 있습니다. 이는 다음 예에서 Logger 필드에 대해 log.Logger 유형 또는 포인터 *log.Logger를 사용할 수 있음을 의미합니다.
type Job struct {
Command string
*log.Logger
}
포인터의 이점
Eric Urban의 "Embedding in Go" 기사에서는 "포인터별 내장"이라고 하는 포인터 내장의 장점을 강조합니다. ." 여기에는 다음이 포함됩니다:
포인터 임베딩의 예
type Bitmap struct{
data [4][5]bool
}
type Renderer struct{
*Bitmap //Embed by pointer
on uint8
off uint8
}
이 예에서 렌더러 유형은 포인터로 비트맵을 포함합니다. 이는 렌더러의 여러 인스턴스가 Bitmap의 단일 인스턴스를 공유하고 해당 동작을 독립적으로 사용자 정의할 수 있음을 의미합니다.
기술적 제한
포인터에 대한 포인터를 사용할 수 없다는 점에 유의하는 것이 중요합니다. 또는 인터페이스에 대한 포인터를 익명 필드로 사용합니다. 이러한 제한은 이러한 유형에 임베딩의 핵심 측면인 메서드가 없다는 사실에서 비롯됩니다. 메소드는 임베디드 유형에서 임베딩 유형으로 승격되어 직접 액세스할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3