공유 필드가 있는 서로 다른 구조체에 저장 메서드를 추가하는 방법
다음 컨텍스트를 고려하세요.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!