Go의 다형성: 인터페이스 메서드 및 포인터 수신기 자세히 살펴보기
Go에서 다형성은 기본적으로 지원되지 않지만 지원될 수 있습니다. 인터페이스를 사용하여 달성됩니다. 이는 다음과 같은 일반적인 질문을 야기합니다. 왜 인터페이스에 setter 메소드가 허용되지 않습니까?
제공된 코드에서 알 수 있듯이 setter 메소드가 값 수신자로 정의되면 함수 내에서 변경된 사항이 종료 시 손실됩니다. . 수신기를 포인터 수신기로 수정하면 영구적인 변경이 가능하지만 컴파일 오류가 발생합니다.
이 문제를 해결하기 위해 Go에서는 해결 방법을 제공합니다. 수정된 코드는 setter 메서드의 수신자를 포인터로 수정합니다. 이를 통해 함수는 기본 데이터 구조를 수정하고 변경 사항을 유지할 수 있습니다. 수정된 코드는 인터페이스를 사용하여 인터페이스를 통해 포인터 수신기 메서드에 액세스할 수 있도록 합니다.
package main import "fmt" 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 } func main() { s := &MyStruct{123} fmt.Println(s.Get()) s.Set(456) fmt.Println(s.Get()) var mi MyInterfacer = s mi.Set(789) fmt.Println(mi.Get()) }
이는 엄밀한 다형성은 아니지만 인터페이스와 포인터 수신기를 사용하여 유사한 결과를 효과적으로 달성합니다. 코드를 사용하면 인터페이스를 통해 속성을 설정하고 데이터와 작업을 깔끔하게 캡슐화할 수 있습니다.
위 내용은 Go 인터페이스가 Setter 메서드를 직접 지원할 수 없는 이유는 무엇이며, 이 문제를 어떻게 해결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!