为了账号安全,请及时绑定邮箱和手机立即绑定

使用文字作为赋值类型

使用文字作为赋值类型

Go
慕标琳琳 2021-08-10 15:33:15
我使用中的代码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 ommittedfunc 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}
查看完整描述

2 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

  • b := Book{}定义一个新变量(b之前未定义),因此它可以采用值类型Book

  • u := User{}没有定义新变量,因为它是方法返回参数的一部分u *User,所以不能使用:=.
    会的u=&User{}

u这是一个命名的结果参数

如果函数执行不带参数的 return 语句,则结果参数的当前值将用作返回值。


查看完整回答
反对 回复 2021-08-10
  • 2 回答
  • 0 关注
  • 201 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信