>백엔드 개발 >Golang >공유 필드가 있는 서로 다른 Go 구조체에 걸쳐 저장 방법을 효율적으로 구현하는 방법은 무엇입니까?

공유 필드가 있는 서로 다른 Go 구조체에 걸쳐 저장 방법을 효율적으로 구현하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-20 12:56:38660검색

How to Efficiently Implement a Save Method Across Dissimilar Go Structs with Shared Fields?

공유 필드가 있는 서로 다른 구조체에 저장 메서드를 추가하는 방법

다음 컨텍스트를 고려하세요.

type ModelA struct {
    Guid string `orm:"pk"`
    FiledA string
}

type ModelB struct {
    Guid string `orm:"pk"`
    FiledB string
}

두 구조체(ModelA 및 ModelB) 모두에 대해 Save() 메서드를 도입해야 할 필요성이 생겼습니다. 공통 기본 구조체를 생성하여 ModelA 및 ModelB에 포함하는 것이 가능하지만 ORM 제한으로 인해 이 접근 방식은 실행 가능하지 않습니다.

대체 접근 방식: 인터페이스 구현

아래와 같이 Savable과 같은 데이터 저장을 위한 공통 인터페이스를 지정합니다.

type Savable interface {
   Save()
}

각 구조체에 대해 Save() 메서드를 구현하여 Savable 인터페이스를 충족하는지 확인합니다.

func (a ModelA) Save() {
   // Save logic for ModelA
}

func (b ModelB) Save() {
   // Save logic for ModelB
}

이 구조를 사용하면 Savable 인터페이스를 통해 두 구조체의 인스턴스에서 작업할 수 있습니다.

var i Savable
i = SomeMethodThatRetunsMyModel()
i.Save()
SomeOthermMethodThatAcceptsASavableAndCallesSave(i)

임베딩을 사용한 구현

또는 다음 작업을 수행할 수 있습니다. 또한 공통 필드(Guid)로 기본 ModelC를 정의하여 임베딩 접근 방식을 선택합니다.

type ModelA struct {
   ModelC
   FiledA string
}

type ModelB struct {
   ModelC
   FiledB string
}

type ModelC struct {
   Guid string `orm:"pk"`
}

func (c ModelC) Save() error {
   // Save logic for ModelC
   return nil
}

그러나 이 방법은 ModelC에 정의된 필드만 저장한다는 점에 유의하세요.

고려 사항

두 접근 방식의 제한 사항에 유의하는 것이 중요합니다.

  • 임베딩 접근 방식은 내장 유형을 정적으로 참조해야 하는 경우 적합하지 않을 수 있습니다.
  • 인터페이스 접근 방식은 더 많은 유연성을 제공하지만 코드 중복이 발생할 수 있습니다.

궁극적으로 최상의 솔루션은 애플리케이션의 특정 요구 사항에 따라 다릅니다.

위 내용은 공유 필드가 있는 서로 다른 Go 구조체에 걸쳐 저장 방법을 효율적으로 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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