>백엔드 개발 >Golang >Go에서 불변 구조체를 만들 수 있나요?

Go에서 불변 구조체를 만들 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-12 03:32:021087검색

Can You Create Immutable Structs in Go?

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.