Go에서 인터페이스를 사용하여 공통 메소드 구현
Go에서 인터페이스는 동일한 메소드 세트를 구현하기 위해 다양한 유형에 대한 메커니즘을 제공합니다. 코드의 다형성을 위해. 그러나 때로는 중복된 코드를 피하면서 공통 메소드를 구현하기 위해 두 가지 유형이 필요한 상황이 발생할 수 있습니다.
다음 시나리오를 고려하십시오.
type First struct { str string } type Second struct { str string } type A interface { PrintStr() }
PrintStr 메소드를 구현하려면 First 및 Second 구조체 모두 일반적으로 다음과 같은 별도의 메서드를 작성합니다.
func (f First) PrintStr() { fmt.Print(f.str) } func (s Second) PrintStr() { fmt.Print(s.str) }
이 접근 방식은 기능적이지만 동일한 메서드를 구현해야 하는 여러 유형이 있는 경우 코드 중복이 발생할 수 있습니다. 이를 극복하기 위해 Go는 유형 임베딩이라는 우아한 솔루션을 제공합니다.
유형 임베딩
유형 임베딩을 사용하면 기존 유형을 임베딩하여 새로운 유형을 구성할 수 있습니다. 이 경우 공통 str 필드와 PrintStr 메서드를 포함하는 기본 유형을 생성할 수 있습니다.
type WithString struct { str string } func (w WithString) PrintStr() { fmt.Print(w.str) }
이제 WithString 유형을 First 및 Second 구조체에 포함할 수 있습니다.
type First struct { WithString } type Second struct { WithString }
이렇게 하면 First 및 Second 구조체 모두 포함된 WithString 유형에서 PrintStr 메서드를 상속합니다. 이렇게 하면 각 구조체에 대해 별도의 메소드를 구현할 필요가 없습니다.
예
다음은 유형 임베딩을 사용하여 서로 다른 두 유형에 대한 공통 메소드를 구현하는 방법에 대한 예입니다.
package main import "fmt" type WithString struct { str string } func (w WithString) PrintStr() { fmt.Print(w.str) } type First struct { WithString } type Second struct { WithString } func main() { a := First{ WithString: WithString{ str: "foo", }, } a.PrintStr() // Outputs: foo }
이 접근 방식을 사용하면 공통 메서드에 대한 단일 구현을 유지하면서 다양한 유형에서 사용할 수 있으므로 코드 재사용성을 높이고 코드 중복을 줄일 수 있습니다.
위 내용은 Go에서 다양한 유형에 대한 공통 메서드를 구현할 때 코드를 어떻게 재사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!