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

Golang 将指针传递给 sql .Scan() 返回指针

Golang 将指针传递给 sql .Scan() 返回指针

Go
慕码人2483693 2022-06-27 10:56:52
对为什么会发生以下情况感到困惑。TLDR;我将指针和“&val”传递给 database/sql 的Scan方法,并得到不同的结果rows, err := db.Query(selectRowsQuery)val = new(int)for rows.Next() {  err = rows.Scan(val)...fmt.Println(val)      // 0xc0000b6c48Val 的值是一个指针。为什么 val 保留为指针?但如果我这样做:var val int...err = rows.Scan(&val)fmt.Println(val)          // 0val 作为值返回。“&val”(val 是一个 int 值)和“val” (val 是一个指向 int 的指针)不是一回事吗?
查看完整描述

1 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

在第一种情况下,当您执行此操作时,val = new(int)您将获得一个指针,rows.Scan(val)并将一个值放入指针正确指向的位置,但您正在打印fmt.Println(val): 这只是意味着您希望 Go 打印指针。它做了什么......指针的字符串表示是它指向的地址。你想要做的是fmt.Println(*val),它说'打印指针指向的值'。

第二个示例正常工作,因为var val int初始化了一个值,并fmt.Println(val)正确打印它。要求您通过调用err = rows.Scan(&val)发送地址,因为这就是我们告诉将数据放在哪里而不是传递它不能做任何事情的数据的方式。val&valrows.Scan


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 300 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号