>백엔드 개발 >Golang >기본 유형 없이 Go에서 다형성을 구현하는 방법은 무엇입니까?

기본 유형 없이 Go에서 다형성을 구현하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-17 00:31:03949검색

How to Implement Polymorphism in Go without Base Types?

Go의 다형성 이해

여러 유형의 트랜잭션 및 공유 기본 유형과 관련된 프로그래밍 문제를 해결하려고 시도하는 동안 다형성을 구현하는 데 어려움을 겪을 수 있습니다. 다형성의 개념을 자세히 알아보고 특정 문제를 해결해 보겠습니다.

Go에서는 객체 지향 언어와 달리 다형성이 인터페이스로 제한됩니다. 인터페이스는 다양한 유형으로 구현할 수 있는 메서드 세트를 정의합니다.

귀하의 경우에는 "기본" 유형인 BaseTX와 두 개의 하위 유형인 RewardTX 및 AllowanceTX를 생성하려고 했습니다. 이러한 하위 유형에는 기본 유형에 비해 추가 필드가 있습니다.

TXapi 인터페이스에서 작동하는 logicAndSaveTX 함수를 정의했기 때문에 문제가 발생했습니다. 그러나 이 함수의 구현은 BaseTX 유형에서 작동하므로 하위 유형에서 추가 필드가 제외됩니다.

해결책은 "기본" 유형의 개념을 제거하는 데 있습니다. 대신 메타데이터를 트랜잭션 간에 공유되는 공통 필드로 생각하십시오. 메타데이터를 별도의 유형으로 선언하고 이를 RewardTX 및 AllowanceTX 유형에 포함할 수 있습니다. 그런 다음 각 유형은 특정 필드를 수정하는 자체 logicAndSaveTX 메서드를 가질 수 있습니다.

업데이트된 예는 다음과 같습니다.

type TXapi interface {
    logicAndSaveTX()
}

type Metadata struct {
    Field1 string
    Field2 string
}

type RewardTX struct {
    Metadata 
}

func (tx RewardTX) logicAndSaveTX() {
    // Modify TX-specific fields
    tx.Field1 = "Reward Field 1"
    tx.Field2 = "Reward Field 2"

    // Logic and save metadata shared with AllowanceTX
}

type AllowanceTX struct {
    Metadata 
    AddField string
}

func (tx AllowanceTX) logicAndSaveTX() {
    // Modify TX-specific fields
    tx.Field1 = "Allowance Field 1"
    tx.Field2 = "Allowance Field 2"
    tx.AddField = "Allowance Additional Field"

    // Logic and save metadata shared with RewardTX
}

구성을 수용하고 메서드에 대한 명확한 범위를 정의하면 다음을 통해 다형성을 효과적으로 구현할 수 있습니다. Go의 인터페이스.

위 내용은 기본 유형 없이 Go에서 다형성을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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