gpt4 book ai didi

Go - 访问指针结构的字段

转载 作者:数据小太阳 更新时间:2023-10-29 03:04:06 24 4
gpt4 key购买 nike

我有一个包含密码和电子邮件等敏感字段的用户结构。对于 User 的公共(public)实例,例如事件页面上的公共(public) RSVP,我想排除敏感字段出现在我的 JSON 输出中,即使它们是空白的。

基于此article ,我正在使用复合结构来屏蔽不需要的字段。

问题:在我的数据库函数中进行 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输出,没有使用文章的方法;仅使用我的常规用户结构:

[{

"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{} }

(或者不声明为指针)

请在此处查看展示问题的 Playground ,然后如上所述初始化变量以使其正常工作。

https://play.golang.org/p/fXwvATUm_L

关于Go - 访问指针结构的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46263893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com