私は、パスワードと電子メールのような機密フィールドを含むUser構造体を持っています。たとえば、イベントページの公開RSVPなどのUserのパブリックインスタンスの場合、機密フィールドが空白になっていても、機密フィールドがJSON出力に表示されないようにする必要があります。Go - ポインタ構造体のフィールドへのアクセス
このarticleに基づいて、私は望ましくないフィールドをマスクするために複合構造体を使用しています。
質問:データベースのfuncのrows.Scan中に、どのようにして複合構造体内のポインタ構造体のフィールドに正しくアクセスできますか?フィールドが見つからないため、パニックエラーが発生しています。
私の定期的なユーザ構造体:上記のリンク先の記事では法に基づいて
type User struct {
ID int `json:"id"`
FirstName string `json:"firstname"`
LastName string `json:"lastname"`
Registered int `json:"registered"`
Email string `json:"email"`
Password string `json:"password"`
ProfilePic string `json:"profilepic"`
}
新しい追加の構造体:
:type omit *struct {
}
type PublicUser struct {
*User
Registered omit `json:”registered,omitempty"`
Email omit `json:”email,omitempty"`
Password omit `json:"password,omitempty"`
}
エラーが発生している私のデータベースのFUNC、
func getUsers(db *sql.DB) ([]PublicUser, error) {
query := `SELECT users.id, users.name_first, users.name_last
FROM users
ORDER BY users.name_first asc`
users := []PublicUser{}
rows, err := db.Query(query, e.ID)
if err != nil {
return nil, err
}
defer rows.Close()
for rows.Next() {
var user PublicUser
// ERROR OCCURS HERE. Seems like these fields cannot be found in PublicUser.
// Is the pointer to User working within my PublicUser struct?
err := rows.Scan(&user.ID, &user.FirstName, &user.LastName)
if err != nil {
return nil, err
}
users = append(users, user)
}
return users, nil
}
記事のメソッドを使用していないオリジナルのJSON出力。唯一の私の定期的なユーザー構造体を使用して:
[{
"ID": 25,
"FirstName": "Jim",
"LastName": "Brown",
"Registered": 0,
"Email": "",
"Password": "",
"ProfilePic": ""
},
…
]
理想のJSON出力:
[{
"ID": 25,
"FirstName": "Jim",
"LastName": "Brown",
"ProfilePic": ""
},
…
]
jsonマーシャルオプションについては省略しますか? https://stackoverflow.com/questions/17306358/removing-fields-from-struct-or-hiding-them-in-json-response – bigless
あなたは 'パスワード文字列\' json: " - " \ ''と'Username'と同じですか? –
https://play.golang.org/p/10MKQXmEyV –