> 백엔드 개발 > Golang > Go에 포함된 메서드가 상위 필드에 액세스할 수 있나요?

Go에 포함된 메서드가 상위 필드에 액세스할 수 있나요?

Mary-Kate Olsen
풀어 주다: 2024-12-06 06:06:14
원래의
742명이 탐색했습니다.

Can Embedded Methods in Go Access Parent Fields?

Go의 내장 메소드에서 상위 필드에 액세스: 가능합니까?

Go에서 내장 메소드를 사용하면 유형을 다른 유형에 삽입할 수 있습니다. 코드 재사용 및 더 간단한 인터페이스 제공. 그러나 일반적인 질문이 생깁니다. 임베디드 메소드가 상위 유형의 필드에 액세스할 수 있습니까?

배경:

Go의 임베딩 메커니즘은 구성을 활용하여 유형의 기능을 확장하지 않고 확장합니다. 계승. 유형이 포함되면 해당 필드와 메서드가 포함 유형의 일부가 됩니다.

목표:

이 질문의 목적은 Active Record 스타일 ORM을 만드는 것과 관련이 있습니다. Go의 경우 데이터 저장소를 추상화하기 위해 사용자 구조체에 메소드가 내장되어 있습니다.

예:

type Foo struct {
    *Bar
    Name string
}

func (s *Foo) Method() {
    // How to access "Name" field from this embedded method?
}
로그인 후 복사

질문:

최상위 필드( 상위 필드) s.Name 또는 call과 같은 내장 메소드에서 액세스 가능 s.Method()?

답변:

Go는 내장된 메서드에서 상위 필드에 액세스하는 것을 기본적으로 지원하지 않습니다. 임베디드 메소드의 수신자는 이 경우 임베디드 유형 *Bar에 엄격하게 바인딩됩니다. 따라서 상위 필드에 직접 액세스하는 것은 불가능합니다.

대체 접근 방식:

  • 인터페이스 기반 솔루션: 인터페이스 추가{} 이 인터페이스를 구현하려면 포함 유형이 필요합니다. 이 접근 방식은 상위 유형에 대한 액세스를 제공하지만 복잡성이 더 추가될 수 있습니다.
  • 수정된 API 구조: API를 user.Save() 대신 db.Save(user)로 구성하는 것을 고려하세요. 이 접근 방식은 Go의 관용적 함수 호출 사용과 일치하며 여러 데이터베이스를 우아하게 처리합니다.

위 내용은 Go에 포함된 메서드가 상위 필드에 액세스할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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