Go의 다형성: 존재합니까?
다른 클래스의 객체가 동일한 메소드를 가질 수 있는 능력인 다형성은 기본 측면입니다. 객체지향 프로그래밍의 원리. 그러나 Go에서는 인터페이스에 대한 setter 메소드를 사용할 수 없는 것으로 보입니다.
기본 예를 살펴보겠습니다.
type MyInterfacer interface { Get() int Set(i int) } type MyStruct struct { data int } func (this MyStruct) Get() int { return this.data } func (this MyStruct) Set(i int) { this.data = i }
이 코드가 실행되면 MyStruct 유형에 대한 Set 메소드가 실패합니다. 수신기는 포인터가 아닙니다. 이에 대한 모든 변경 사항은 함수가 종료되면 손실됩니다.
수신자를 포인터로 변경하여 이 문제를 해결하려고 시도할 수도 있습니다.
func (this *MyStruct) Set(i int) { this.data = i }
그러나 이렇게 하면 컴파일 오류가 발생합니다. . Go의 인터페이스 메소드는 포인터 수신기를 가질 수 없습니다.
그렇다면 이 시나리오에서 다형성을 달성할 수 있는 방법이 있습니까?
가장 가까운 대안은 인터페이스 유형을 사용하고 인터페이스를 구현하는 익명 구조체:
type MyInterfacer interface { Get() int Set(i int) } var mi MyInterfacer = &MyStruct{123} fmt.Println(mi.Get()) // prints 123 mi.Set(456) fmt.Println(mi.Get()) // prints 456
이 솔루션은 진정한 다형성은 아니지만 인터페이스를 활용하여 다음을 제공합니다. 다양한 유형의 개체를 조작하는 깔끔하고 유연한 방법입니다.
위 내용은 Go는 다형성을 지원합니까: Setter 메서드에 대한 해결 방법 찾기?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!