중첩 복합 리터럴을 사용하여 합성 구조체 초기화
Go에서는 다른 구조체를 삽입할 때 합성 구조체를 초기화하는 것이 까다로울 수 있습니다. child := Child{ ID: id, a: a, b: b } 의 원래 구문은 포함된 필드 ID를 직접 초기화할 수 없기 때문에 오류가 발생할 수 있습니다.
이 문제를 극복하고 유지하려면 캡슐화, 중첩된 복합 리터럴 사용:
child := Child{ Base: Base{ID: id}, // Initialize the embedded struct a: a, b: b, }
이 접근 방식을 사용하면 단일 표현식으로 구성된 구조체를 초기화하는 동시에 포함된 구조체를 중첩하여 캡슐화를 유지할 수 있습니다. 구조체 초기화.
질문에서 힌트를 얻은 또 다른 해결책은 NewFoo()와 같은 팩토리 메서드를 사용하는 것입니다. 그러나 중첩된 복합 리터럴은 보다 간결하고 안전한 대안을 제공합니다.
복합 리터럴의 제안된 변경
Go 이슈 9859는 지원하기 위해 복합 리터럴의 구문 변경을 제안합니다. 포함된 필드를 직접 초기화합니다. 이 변경으로 인해 child := Child{ ID: id, a: a, b: b }의 원래 구문이 활성화됩니다.
캡슐화 고려 사항
구조체 삽입은 허용되지 않습니다. Go의 엄격한 캡슐화 기능. 포함된 필드에 대한 간접적인 액세스를 허용하지만 이를 강제하지는 않습니다. 코드는 child.ID를 사용하는 것 외에도 child.Base.ID에 직접 액세스할 수 있습니다. 따라서 캡슐화의 책임은 궁극적으로 애플리케이션의 디자인과 사용법에 있습니다.
위 내용은 복합 리터럴을 사용하여 Go에서 내장 구조체를 효율적으로 초기화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!