Go 구조체의 비공개 필드와 메서드를 어떻게 캡슐화할 수 있나요?

Susan Sarandon
풀어 주다: 2024-11-17 08:32:03
원래의
623명이 탐색했습니다.

How can I Encapsulate Private Fields and Methods in Go Structs?

구조체에 대한 전용 필드 및 메서드 캡슐화

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿