Go의 불변 구조체
질문: Go에서 불변 구조체를 생성하는 것이 가능합니까? 값을 수정하지 않고 해당 필드에서 읽기 작업만 수행할 수 있습니까? 그렇다면 어떻게 달성할 수 있나요?
답변:
Go에서 구조체는 본질적으로 변경 가능합니다. 그러나 특정 기술을 사용하여 패키지 외부에서 구조체를 읽기 전용으로 만드는 것이 가능합니다. 수행 방법은 다음과 같습니다.
불변 구조체 정의:
내보내지 않은 필드(소문자로 시작하는 필드)로 구조체를 정의합니다. 이는 패키지 외부에서 필드에 직접 액세스하는 것을 방지합니다.
package mypackage type myReadOnly struct { value int }
리더 함수 제공:
구조체의 비공개 필드에 액세스할 수 있는 리더 함수를 만듭니다. 이러한 함수는 필드의 복사본을 반환하여 원래 값이 수정되지 않은 상태로 유지되도록 합니다.
func (s myReadOnly) Value() int { return s.value }
불변 구조체 초기화:
구조체를 초기화하는 함수를 만듭니다. 그리고 인스턴스를 반환합니다. 이 함수는 불변 구조체의 새 인스턴스를 생성하는 데 사용됩니다.
func NewMyReadOnly(value int) myReadOnly{ return myReadOnly{value: value} }
사용법:
불변 구조체를 사용하려면 패키지를 가져오고 다음을 사용하여 인스턴스를 생성합니다. 초기화 기능. 판독기 기능을 사용하여 필드에 액세스합니다.
myReadOnly := mypackage.NewMyReadOnly(3) fmt.Println(myReadOnly.Value()) // Prints 3
이 예에서 myReadOnly 인스턴스의 값 필드를 수정하려고 하면 필드가 내보내지지 않기 때문에 컴파일 오류가 발생합니다. 판독기 함수 Value는 필드를 수정하지 않고 필드에 액세스하는 방법을 제공합니다. 이 접근 방식은 Go에서 불변 구조체를 효과적으로 생성합니다.
위 내용은 Go에서 불변 구조체를 만들 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!