임베디드 메소드에서 상위 필드 액세스
배경
간략화를 위해 임베디드 메소드를 사용하는 경우 객체지향 프로그래밍에서는 다음과 같은 질문이 생깁니다. 이 메소드가 상위 필드에 액세스할 수 있습니까? object?
목표
목표는 Active Record 패턴을 모방하는 Go용 ORM을 만드는 것입니다. 여기서 Save() 및 Delete()와 같은 메서드가 연결됩니다. 저장되거나 삭제되는 객체. 이 접근 방식은 코드 가독성을 단순화하고 기본 데이터 저장소에서 코드를 분리합니다.
예
아래 코드는 Foo에 포함된 메서드(Test())를 보여줍니다. 유형:
package main import ( "fmt" "reflect" ) func main() { test := Foo{Bar: &Bar{}, Name: "name"} test.Test() } type Foo struct { *Bar Name string } func (s *Foo) Method() { fmt.Println("Foo.Method()") } type Bar struct { } func (s *Bar) Test() { t := reflect.TypeOf(s) v := reflect.ValueOf(s) fmt.Printf("model: %+v %+v %+v\n", s, t, v) fmt.Println(s.Name) s.Method() }
질문
포함된 메소드(Test())가 상위(Foo) 객체의 Name 필드에 액세스할 수 있습니까?
답변
아니요, Go for에는 직접적인 방법이 없습니다. 상위 개체의 필드에 액세스하기 위한 내장된 메서드입니다. Test() 메소드의 수신자 유형은 *Bar이고 대상 객체는 Foo 유형입니다.
대체 접근 방식
상위 필드에 액세스하는 것이 필수인 경우 가능합니다. 솔루션에는 다음이 포함됩니다.
위 내용은 Go에 포함된 메서드가 상위 개체 필드에 액세스할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!