Go 为什么我不能使用函数中的指针更新变量的值?

Go 为什么我不能使用函数中的指针更新变量的值?,go,Go,我试着用围棋写一些东西,像这样: 主程序包 进口( “fmt” ) 类型Num struct{ val int } func foo(n*Num){ f:=*n 对于i:=1;i

我试着用围棋写一些东西,像这样:

主程序包
进口(
“fmt”
)
类型Num struct{
val int
}
func foo(n*Num){
f:=*n
对于i:=1;i<3;i++{
fmt.Println(f)
f、 val+=i
}
}
func main(){
a:=[]Num{Num{val:3}
foo(&(a[0]))
fmt.Println(a)
}
它给了我:

{3}
{4}
[{3}]

但我希望最后一行是
[{5}]
。我做错了什么?

您正在将
n
的内容复制到
f
,然后修改
f
。变量
f
不是指针,它包含
*n
的副本


在函数中直接使用
n
,或者使用
f:=n
而不是
f:=*n
。将
f
声明为指针。

如果要更新
n
,请更新
n
;不要将值复制到
f
并更新
f
。老实说,我不知道
f:=*n
正在复制,但我只是将其删除并直接使用
*n
,它就起作用了。我想这就是你的意思?