가설 (다른 구조체의 구조체를 내장), I는 API를 실행하고 사용자가 사용자 리소스에 대한 GET 요청을 할 때, 나는 JSONGolang + MongoDB를 내장 유형
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"`
}
로 관련 필드를 반환합니다 보시다시피, 사용자의 비밀 필드는 json:"-"
입니다. 이것은 대부분의 작업에서 내가 돌아오고 싶지 않다는 것을 의미합니다. 이 경우, 응답 필드 비밀 json:"-"
로 반환되지 않습니다
{
"id":1,
"Name": "John"
}
필드를 생략 할 것이다.
이제 암호 필드를 반환하려는 관리자 전용 경로를 엽니 다. 그러나 이는 User 구조체를 복제하는 것을 의미합니다.
내 현재 솔루션은 다음과 같습니다 : 관리 사용자로 사용자를 포함하는 방법이
type adminUser struct {
Id bson.ObjectId `json:"id,omitempty" bson:"_id,omitempty"`
Name string `json:"name,omitempty" bson:"name,omitempty"`
Secret string `json:"secret,omitempty" bson:"secret,omitempty"`
}
있습니까? 상속의 종류 :
type adminUser struct {
User
Secret string `json:"secret,omitempty" bson:"secret,omitempty"`
}
위의 경우 현재 작동하지 않습니다.이 경우 필드 암호 만 반환됩니다.
참고 : 실제 코드베이스에는 수십 개의 필드가 있습니다. 따라서 코드 복제 비용이 높습니다.
실제 몽고 쿼리
은 다음과 같습니다 :func getUser(w http.ResponseWriter, r *http.Request) {
....omitted code...
var user adminUser
err := common.GetDB(r).C("users").Find(
bson.M{"_id": userId},
).One(&user)
if err != nil {
return
}
common.ServeJSON(w, &user)
}
이 경우 런타임 오류가 발생합니다 : 내부 서버 오류 struct main.adminUser에 중복 키 'secret'이 있습니다! – samol
내 대답이 업데이트되었습니다. 나는 중복 된 키가 있다는 것을 깨닫지 못했습니다. –
레코드의 보조 노트와 마찬가지로 _ ", inline"_ 태그의 사용은 일반 필드 (비 포함/비 익명)에 대해서도 작동합니다. –