>백엔드 개발 >Golang >Go는 다형성을 지원합니까: Setter 메서드에 대한 해결 방법 찾기?

Go는 다형성을 지원합니까: Setter 메서드에 대한 해결 방법 찾기?

Patricia Arquette
Patricia Arquette원래의
2024-11-25 13:27:11194검색

Does Go Support Polymorphism: Finding Workarounds for Setter Methods?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.