[英]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.