Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Golang将指针传递给sql.Scan()返回指针_Go_Pointers - Fatal编程技术网

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

Golang将指针传递给sql.Scan()返回指针,go,pointers,Go,Pointers,困惑于为什么会发生下面的事情。 太长,读不下去了我将一个指针和一个“&val”传递给database/sql的Scan方法,并得到不同的结果 rows, err := db.Query(selectRowsQuery) val = new(int) for rows.Next() { err = rows.Scan(val) ... fmt.Println(val) // 0xc0000b6c48 Val的值是指针。为什么瓦尔一直是一个指针 但如果我这样做: var val i

困惑于为什么会发生下面的事情。 太长,读不下去了我将一个指针和一个“&val”传递给database/sql的Scan方法,并得到不同的结果

rows, err := db.Query(selectRowsQuery)
val = new(int)

for rows.Next() {
  err = rows.Scan(val)
...
fmt.Println(val)      // 0xc0000b6c48
Val的值是指针。为什么瓦尔一直是一个指针

但如果我这样做:

var val int
...
err = rows.Scan(&val)
fmt.Println(val)          // 0

val作为值返回。“&val”(val是一个int值)和“val”(val是指向int的指针)不是一回事吗?

在第一种情况下,当您执行
val=new(int)
时,您会得到一个指针,并且
行。Scan(val)
会将一个值放入指针正确指向的位置,但是您正在打印
fmt.Println(val)
:这意味着您想要打印指针。确实如此。。。指针的字符串表示是指针指向的地址。您要做的是
fmt.Println(*val)
,上面写着“打印指针指向的值”


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

要打印整数而不是第一段代码中的指针,取消对指针的引用:
fmt.Println(*val)
请浏览Go for language fundamentals或查阅任何C参考资料,了解什么是指针及其行为。谢谢!!非常清楚的解释,现在有意义:)