구조체에 대한 전용 필드 및 메서드 캡슐화
Go에서는 구조체 내의 필드와 메서드에 대한 가시성 개념을 이해하는 것이 중요합니다. 기본적으로 대문자로 시작하는 필드와 메서드는 내보낸 것으로 간주되며 구조체를 선언하는 패키지를 가져오는 외부 코드나 패키지에서 액세스할 수 있습니다.
다음 코드를 고려하세요.
package mypackage type mytype struct { Size string Hash uint32 } func (r *mytype) doPrivate() string { return r.Size } func (r *mytype) Do() string { return doPrivate("dsdsd") }
이 예에서는 Size 및 Hash 필드와 doPrivate 메소드가 모두 대문자로 인해 내보내집니다. 이는 mypackage 패키지 외부의 모든 코드가 이러한 멤버에 액세스할 수 있음을 의미합니다.
그러나 doPrivate 메소드를 캡슐화하고 외부 액세스를 방지하기 위해 Go의 패키지 가시성 규칙을 활용할 수 있습니다. mytype 구조체와 해당 doPrivate 메서드를 별도의 패키지에 배치하면 해당 패키지 내의 유형에만 액세스할 수 있습니다.
이를 달성하는 방법은 다음과 같습니다.
// mytype.go package mytype type Type struct { Size string Hash uint32 } func (r *Type) doPrivate() string { return r.Size }
// mypackage.go package mypackage import "./mytype" func (r *mytype.Type) Do() string { return r.doPrivate() }
구조체와 해당 프라이빗 메서드를 별도의 패키지로 분리하여 mytype 패키지 내의 유형만 doPrivate 메서드에 액세스할 수 있도록 합니다. mypackage를 포함한 다른 패키지는 여전히 Do 메서드를 사용하여 Type 구조체의 공용 멤버에 액세스할 수 있지만 doPrivate 메서드에 직접 액세스할 수는 없습니다.
위 내용은 Go 구조체의 비공개 필드와 메서드를 어떻게 캡슐화할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!