我使用中的代码func Root作为创建Login下面显示的另一种方法的指南。特别是,在 中Root,我将文字分配Book{}给b,然后在Scan. 该代码不会引发任何错误(尽管我不确定它是否是好的代码),但是当我尝试在Login函数中执行类似的操作时,我正在从这篇博文修改该函数,我收到此错误
cannot use User literal (type User) as type *User in assignment
对于它的价值,我在编译时也在上面得到这个错误
no new variables on left side of :=
但是我不是在第二种方法中做同样的事情,即将文字分配给u := User{}变量然后在扫描中使用它吗?
当你可以和不能在赋值中使用文字类型时,你能用下面的代码解释一下吗?
func Root(w http.ResponseWriter, r *http.Request) {
rows, err := db.Query("SELECT title, author, description FROM books")
books := []Book{}
for rows.Next() {
b := Book{}
err := rows.Scan(&b.Title, &b.Author, &b.Description)
PanicIf(err)
books = append(books, b)
}
...//code ommitted
func Login(password, email string) (u *User, err error) {
u := User{}
db.QueryRow("select * from users where email=$1 ", email).Scan(&u.Id, &u.Password, &u.Email)
if err != nil {
return
}
err = bcrypt.CompareHashAndPassword(u.Password, []byte(password))
if err != nil {
u = nil
}
return
}
眼眸繁星
相关分类