>백엔드 개발 >Golang >Golang 및 MongoDB에서 임베디드 유형을 사용하여 상속과 유사한 동작을 달성하는 방법은 무엇입니까?

Golang 및 MongoDB에서 임베디드 유형을 사용하여 상속과 유사한 동작을 달성하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-08 07:47:02266검색

How to Achieve Inheritance-Like Behavior with Embedded Types in Golang and MongoDB?

Golang 및 MongoDB의 임베딩 유형: 상속형 솔루션

사용자 인터페이스와 내부 작업 모두에 대한 데이터 모델을 설계할 때 일반적으로 특정 상황에서만 노출되어야 하는 민감한 필드를 포함해야 할 필요성이 발생합니다. Golang에서는 bson 패키지를 활용하여 특정 필드의 포함 또는 제외를 포함한 데이터 직렬화를 관리할 수 있습니다.

다음 시나리오를 고려하세요.

type User struct {
  Id      bson.ObjectId `json:"id,omitempty" bson:"_id,omitempty"`
  Name    string        `json:"name,omitempty" bson:"name,omitempty"`
  Secret  string        `json:"-,omitempty" bson:"secret,omitempty"`
}

이 예에서 Secret 필드는 json:"-"으로 표시되며 일반 사용자에게 반환되는 JSON 응답에는 포함되지 않습니다. 그러나 관리자의 경우 이 필드에 액세스해야 합니다. 코드 중복을 피하기 위해 다음과 같이 User 구조체를 adminUser 구조체에 포함하는 것을 고려할 수 있습니다.

type adminUser struct {      
  User
  Secret  string        `json:"secret,omitempty" bson:"secret,omitempty"`
}

안타깝게도 이 접근 방식은 Secret 필드만 반환되지 않고 Secret 필드만 반환되기 때문에 예상대로 작동하지 않습니다. 사용자 필드.

이 문제를 극복하기 위해 bson 패키지의 bson:",inline" 플래그를 활용할 수 있습니다. 이 플래그를 사용하면 추가 필드를 정의하는 동시에 포함된 User 구조체에서 필드를 상속할 수 있습니다.

type adminUser struct {
    User `bson:",inline"`
    Secret string `json:"secret,omitempty" bson:"secret,omitempty"`
}

이것은 포함 문제를 해결하는 반면, 데이터베이스에서 데이터를 읽을 때 중복 키 오류라는 새로운 문제가 발생합니다. . 이 문제를 해결하려면 Secret 필드를 User 구조체에서 adminUser 구조체로 옮기는 것이 좋습니다. 이렇게 하면 Secret 필드가 adminUser 컨텍스트에서만 노출됩니다. 이러한 방식으로 사용자 역할에 따라 민감한 필드의 노출을 관리하면서 일관된 데이터 모델을 유지할 수 있습니다.

위 내용은 Golang 및 MongoDB에서 임베디드 유형을 사용하여 상속과 유사한 동작을 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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