Pointers 如何将数据库行扫描到指向结构的指针中?
根据我在指针接收器上编写方法时的理解,我可以修改值,假设我有这个结构Pointers 如何将数据库行扫描到指向结构的指针中?,pointers,go,Pointers,Go,根据我在指针接收器上编写方法时的理解,我可以修改值,假设我有这个结构 type User Struct { ID uint64 Name string Avatar *string // other fields } func (user *User) Update() error { sql := `UPDATE users SET "avatar" = $1 RETURNING *` err := models.DB.QueryRow(sql, user.Ava
type User Struct {
ID uint64
Name string
Avatar *string
// other fields
}
func (user *User) Update() error {
sql := `UPDATE users SET "avatar" = $1 RETURNING *`
err := models.DB.QueryRow(sql, user.Avatar).Scan(
user.ID, // &user.ID works
user.Name, // &user.Name works
user.Avatar, // &user.Avatar works
)
return err
}
所以从技术上讲,如果
user
是指向该代码应该工作的结构的指针?但是当我调用Update
方法时,我得到的接收器不是指针
错误,我缺少什么?虽然user
是方法中的指针,但您没有将user
传递到Scan
,而是传递字段值。当你写作时
user.ID
相当于
(*user).ID // this copies the ID value
(参见规范中的相关章节)
要获取ID字段的地址,需要使用&
运算符
&user.ID // takes the address of ID
虽然
user
是方法中的一个指针,但您没有将user
传递到Scan
,而是传递字段值。当你写作时
user.ID
相当于
(*user).ID // this copies the ID value
(参见规范中的相关章节)
要获取ID字段的地址,需要使用&
运算符
&user.ID // takes the address of ID
你在代码中写了答案,你只是在问为什么?@JimB是的,我不明白为什么不起作用。你在代码中写了答案,你只是在问为什么?@JimB是的,我不明白为什么不起作用。