Golang 인터페이스를 사용하여 서로 다른 유형의 인터페이스 메소드 구현
Go에서는 서로 다른 유형의 데이터 구조가 동일한 인터페이스를 구현하는 것이 바람직한 경우가 많습니다. 공통된 동작 세트를 제공합니다. 예를 들어, 두 개의 구조체를 고려해보세요:
type First struct { str string } type Second struct { str string }
우리는 두 구조체 모두 인터페이스 A를 구현하도록 하고 싶습니다:
type A interface { PrintStr() // Print First.str or Second.str }
그러나 각 구조체에 대해 별도로 PrintStr()을 구현하는 것은 중복된 것처럼 보입니다.
func (f First) PrintStr() { fmt.Print(f.str) } func (s Second) PrintStr() { fmt.Print(s.str) }
A를 구현하는 모든 구조체에 대해 단일 구현을 갖는 것이 이상적입니다. 이를 직접 시도합니다. 작동하지 않습니다:
func (a A) PrintStr() { fmt.Print(a.str) }
그 이유는 a에 str 필드가 없기 때문입니다. 대신, 더 우아한 솔루션은 기본 유형을 생성하고 이를 두 구조체에 포함하는 것입니다.
type WithString struct { str string } type First struct { WithString } type Second struct { WithString } type A interface { PrintStr() // Print First.str or Second.str } func (w WithString) PrintStr() { fmt.Print(w.str) }
여기서 WithString은 기본 유형 역할을 하고 First와 Second는 이를 포함합니다. 이를 통해 PrintStr()에 대한 중앙 집중식 구현이 제공됩니다.
사용 예:
a := First{ WithString: WithString{ str: "foo", }, }
WithString 인스턴스를 삽입하여 First 인스턴스를 생성할 수 있습니다. 이 기술을 사용하면 동일한 인터페이스를 구현하는 여러 다른 유형에 대해 하나의 구현을 갖는다는 목표를 달성할 수 있습니다.
위 내용은 Golang에서 서로 다른 유형에 대한 인터페이스 메소드를 어떻게 구현할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!