공개 및 관리자가 볼 수있는 프로젝트의 엔터티가 있습니다. 모든 필드가 공개적으로 접근 가능한 것은 아닙니다. 예를 들어구조 태그를 무시하십시오.
type Foo struct {
Id bson.ObjectId `json:"id" bson:"_id"`
DateAdded time.Time `json:"date_added" bson:"date_added"`
Bar string `json:"bar" bson:"bar"`
AdminOnly string `json:"admin_only" bson:"admin_only"`
}
AdminOnly 필드는 관리자 만 볼 수 있어야한다. 요청이 공중에서 올 때 지금은 는, 나는 내 기업에 새로운 필드를 추가해야하는 경우 복사가 새로운 구조체에 대한 모든 필요한 필드
type FooPublic struct {
Id bson.ObjectId `json:"id" bson:"_id"`
DateAdded time.Time `json:"date_added" bson:"date_added"`
Bar string `json:"bar" bson:"bar"`
}
func (f *Foo) Public() (res FooPublic) {
res = FooPublic{
Id: f.Id,
DateAdded: f.DateAdded,
Bar:f.Bar,
}
return
}
는하지만, 내가 3 곳을 추가 할 필요가 별도의 메소드를 호출한다. 구조체 자체에서는 PublicFoo
및 Public
메서드에 있습니다.
이것은 건방진 원칙 인 것 같습니다. 올바른, 관용적 인 해결책은 무엇입니까? FooPublic
을 정의하여 필요한 필드의 태그를 무시할 수 있습니까? 아니면 아마 적어도 하나의 구조체에서 해당 필드를 다른 것으로 복사하는 좋은 방법이 있습니다. 따라서 Public
메서드에서 수동으로이 작업을 수행 할 필요가 없습니까?
감사합니다. 그것은 저를 위해 작동 해결책 인 것을 보인다. 공개 및 관리자 권한에 관해서는 앱 사용자의 역할을 의미하므로 사용자 역할에 따라 Foo 또는 FooPublic을 json으로 반환합니다. – user6743038
예, 당신은'Public()'메소드를 전혀 필요로하지 않습니다. 당신이'type Foo struct {FooPublic; AdminOnly 문자열; }'그러면'foo.FooPublic'을 사용하여'var foo Foo'의 임베디드'FooPublic' 값을 얻을 수 있습니다. –