"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > GO에서 메소드 상속을 위해 임베디드 스트러크를 대체 할 수 있습니까?

GO에서 메소드 상속을 위해 임베디드 스트러크를 대체 할 수 있습니까?

2025-02-06에 게시되었습니다
검색:712

  Can Embedded Structs Be Replaced for Method Inheritance in Go?

내장 된 스트루트

구조물을 포함시킬 수 있습니다. 마치 함유 구조물의 일부인 것처럼. 이것은 유형간에 상속을 생성하는 데 사용할 수있는 강력한 기능입니다.

gotcha

내장 구조물의 메소드 세트는 그렇지 않습니다. 함유 구조물로 자동 홍보. 방법을 홍보하려면 내장 된 구조물은 익명이어야합니다.

메소드 프로모션

메소드 프로모션은 익명 임베디드 구조물의 메소드에 액세스 할 수있는 언어 기능입니다. 그것들은 함유 구조물의 방법이었다. 이것은 다음과 같은 규칙에 따라 달성됩니다.

    익명 필드에 유형 t가있는 경우, 프로모션 메소드는 t 형 및 *t의 수신기가 있습니다. , 프로모션 된 메소드에는 t 또는 *t. 지도 [문자열] 인터페이스 {} func (p props) getstring (키 스트링) 문자열 { 반환 p [키]. (문자열) } 노드 구조물 유형 { 소품 } func main () { 노드 : = 노드 { "테스트": "foo"} fmt.println (node.getstring ( "test")) // 출력 : foo }
  • 이 예에서는 노드 구조물에 익명의 유형 소품이 포함됩니다. 이를 통해 소품의 GetString 메소드가 노드로 홍보 할 수 있습니다.
대체 접근 방식

임베딩없이 대체 접근 방식은 포인터 수신기를 사용하는 것입니다. 수신기 기능에 대한 포인터를 전달하면 기본 구조물의 필드와 메소드에 포함시킬 수 없습니다. 포인터 수신기 사용 :

type Props map[string]interface{}

func (p Props) GetString(key string) string {
    return p[key].(string)
}

type Node struct {
    Props
}

func main() {
    node := Node{"test": "foo"}
    fmt.Println(node.GetString("test")) // Output: foo
}

이 예에서는 GetString 메소드에 대한 포인터 수신기를 사용합니다. 이를 통해 우리는 그것을 포함시키지 않고도 기본 소품 구조의 필드와 방법에 액세스 할 수 있습니다.

결론

내장 된 스트러크는 상속을위한 강력한 도구입니다. 항상 최선의 선택은 아닙니다. 방법 홍보가 필요하거나 필요하지 않은 경우 포인터 수신기를 사용하면보다 유연하고 성능이 뛰어난 대안을 제공 할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3