> 백엔드 개발 > Golang > Go 구조체에 동일한 이름을 가진 구조체를 포함하는 방법은 무엇입니까?

Go 구조체에 동일한 이름을 가진 구조체를 포함하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-02 20:21:03
원래의
313명이 탐색했습니다.

How to Embed Structs with Identical Names in a Go Struct?

구조체에 동일한 이름을 가진 구조체 포함

질문은 단일 구조체에 동일한 이름을 가진 두 구조체를 포함하는 데 중점을 둡니다. 일반적으로 이렇게 시도하면 다음 코드 조각에 예시된 것처럼 중복 필드 오류가 발생합니다.

type datastore struct {
    *sql.Store
    *file.Store
}
로그인 후 복사

별칭을 솔루션으로 입력

이를 방지하려면 문제가 발생하는 경우 권장되는 해결 방법은 유형 별칭을 활용하는 것입니다. 내장된 구조체 중 하나에 대체 이름을 할당함으로써 Go 컴파일러는 두 인스턴스를 구별합니다. 다음 수정된 코드를 고려하십시오.

type SqlStore = sql.Store // this is a type alias

type datastore struct {
    *SqlStore
    *file.Store
}
로그인 후 복사

이 시나리오에서 SqlStore는 원래 sql.Store 유형의 별칭 역할을 합니다. 따라서 데이터 저장소 내에 포함된 필드는 이제 *SqlStore와 *file.Store로 구분되어 중복 필드 충돌을 효과적으로 해결합니다.

유형 별칭의 이점

달리 전통적인 유형 선언에서는 유형 별칭이 별도의 새 유형을 도입하지 않습니다. 대신, 단순히 기존 유형에 대한 대체 이름을 생성합니다. 결과적으로 원본 유형의 동작과 특성이 유지됩니다. 유형 별칭을 활용하면 개발자는 외부 코드와의 호환성을 유지하면서 기본 구현 수정을 피할 수 있습니다.

대체 옵션

유형 별칭 외에도 몇 가지 대체 접근 방식이 있습니다. 원하는 기능을 달성하려면:

  • 래퍼 구조체 생성: 두 내장 구조체를 모두 포함하는 새 구조체를 정의하여 효과적으로 컨테이너를 생성합니다.
  • 인터페이스 임베딩 구현: 인터페이스 임베딩을 사용하면 구조체를 직접 임베딩하지 않고도 원하는 기능을 구현할 수 있습니다. 이는 더 큰 유연성과 분리를 제공합니다.
  • 구성 활용: 삽입할 필요 없이 별도의 구조체를 통해 원하는 기능을 구성합니다. 이 접근 방식은 캡슐화와 모듈성을 촉진합니다.

위 내용은 Go 구조체에 동일한 이름을 가진 구조체를 포함하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿