> 백엔드 개발 > Golang > Go 및 상속: 코드 재사용성을 위해 구성이 상속보다 뛰어난 경우는 언제입니까?

Go 및 상속: 코드 재사용성을 위해 구성이 상속보다 뛰어난 경우는 언제입니까?

Susan Sarandon
풀어 주다: 2024-11-10 08:35:03
원래의
283명이 탐색했습니다.

Go and Inheritance: When Does Composition Outshine Inheritance for Code Reusability?

Go와 상속: 코드 재사용을 위한 구성 수용

Go에서는 기본 구조를 넘어서 기능을 확장하는 데 상속 대신 구성을 사용하는 경우가 많습니다. 이렇게 하면 코드 명확성이 보장되고 중복이 최소화됩니다.

다른 구조체로 확장할 수 있는 메서드를 사용하여 기본 구조체를 정의하는 것이 목표인 다음 예제를 고려해 보세요.

type MyInterface interface {
  SomeMethod(string)
  OtherMethod(string)
}

type Base struct {
  B MyInterface
}

func (b *Base) SomeMethod(x string) {
  b.B.OtherMethod(x)
}

type Extender struct {
  Base
}

func (b *Extender) OtherMethod(x string) {
  // Do something...
}

func NewExtender() *Extender {
  e := Extender{}
  e.Base.B = &e
  return &e
}
로그인 후 복사

이 예제는 작동하지만 , 순환 구조로 인해 복잡해 보입니다. 코드 중복을 줄이고 더 읽기 쉬운 코드를 만들려면 임베딩 사용을 고려해 보세요.

임베딩을 사용하면 특정 인터페이스를 구현하는 구조체를 구성할 수 있습니다. 예를 들어 읽기 및 쓰기를 위한 좁은 인터페이스를 만들 수 있습니다.

type Reader interface {
    Read(p []byte) (n int, err error)
}

type Writer interface {
    Write(p []byte) (n int, err error)
}
로그인 후 복사

이러한 인터페이스를 구성하여 ReadWriter 인터페이스를 만들 수 있습니다.

type ReadWriter interface {
    Reader
    Writer
}
로그인 후 복사

마찬가지로 다음과 같은 구조체를 구성할 수 있습니다. Reader 및 Writer를 MyReadWriter 구조체로 구현합니다.

type MyReader struct {}
func (r *MyReader) Read(p []byte) (n int, err error) {
    // Implements Reader interface.
}
type MyWriter struct {}
func (w *MyWriter) Write(p []byte) (n int, err error) {
    // Implements Writer interface.
}

type MyReadWriter struct {
    *MyReader
    *MyWriter
}
로그인 후 복사

MyReadWriter 구조체는 이제 ReadWriter 인터페이스를 구현하므로 이 구조체 내에서 Reader 또는 Writer를 구현하는 모든 구성 요소를 사용할 수 있습니다.

이 임베딩 기술은 코드 재사용성, 종속성 주입을 촉진하고 구현하는 구성 요소의 교체를 활성화하여 테스트를 용이하게 합니다. 특정 인터페이스.

위 내용은 Go 및 상속: 코드 재사용성을 위해 구성이 상속보다 뛰어난 경우는 언제입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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