[英]Go - Accessing fields of a pointer struct
我有一个用户结构,其中包含敏感字段,例如密码和电子邮件。 对于User的公共实例,例如事件页面上的公共RSVP,我希望排除敏感字段以使其不显示在JSON输出中,即使它们为空。
根据本文 ,我正在使用复合结构掩盖不需要的字段。
问题:在数据库功能中的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 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输出,未使用文章的方法; 仅使用我的常规User结构:
[{
"ID": 25,
"FirstName": "Jim",
"LastName": "Brown",
"Registered": 0,
"Email": "",
"Password": "",
"ProfilePic": ""
},
…
]
所需的JSON输出:
[{
"ID": 25,
"FirstName": "Jim",
"LastName": "Brown",
"ProfilePic": ""
},
…
]
问题在于,当您在此处初始化变量时:
var user PublicUser
user
所有字段均采用其“零”值。
由于您要嵌入一个指针,并且指针的零值为nil
,因此不能在没有错误的情况下使用该指针。
为了使它起作用,您应该像这样初始化user
:
user = PublicUser{ User: &User{} }
(或者不要将其声明为指针)
请参见此处显示问题的操场,然后按照上面的描述初始化变量以使其起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.