对为什么会发生以下情况感到困惑。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
&val
rows.Scan
- 1 回答
- 0 关注
- 300 浏览
添加回答
举报
0/150
提交
取消