Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
Pointers 指针理解_Pointers_Go - Fatal编程技术网

Pointers 指针理解

Pointers 指针理解,pointers,go,Pointers,Go,我有变量的结构类型和引用地址,但它不反映defer函数中变量的最新值 类型XY结构{ S弦 } 函数闭包(x*XY){ 如果x!=nil{ fmt.Println(“指针闭合”,x.S) } } func main(){ xp2:=&XY{“指针-X2优先”} fmt.Println(xp2) 延迟关闭(xp2) xp2=&XY{“指针-X2秒”} fmt.Println(xp2) } 输出 &{Pointer-X2 First} &{Pointer-X2 Second} 指针先关闭指针-X2

我有变量的结构类型和引用地址,但它不反映
defer
函数中变量的最新值

类型XY结构{
S弦
}
函数闭包(x*XY){
如果x!=nil{
fmt.Println(“指针闭合”,x.S)
}
}
func main(){
xp2:=&XY{“指针-X2优先”}
fmt.Println(xp2)
延迟关闭(xp2)
xp2=&XY{“指针-X2秒”}
fmt.Println(xp2)
}
输出
&{Pointer-X2 First}
&{Pointer-X2 Second}
指针先关闭指针-X2
预期产量

0xc000086018
0xc000086018
Pointer-Closing Pointer-X2 Second
我的问题是:

  • 为什么它在实际输出中显示为“&”,它假设打印变量的地址
  • 为什么延迟函数不反映“xp2”变量的最新值
  • 因此,对于第2点,我已经实现了下面的函数。有人能告诉我这是解决这个问题的最好办法吗

    func main(){
    xp2:=XY{“指针-X2优先”}
    延迟关闭(&xp2)
    xp2=XY{“指针-X2秒”}
    }
    
    输出为

    Pointer-Closing Pointer-X2 Second
    
  • 为什么它在实际输出中显示为“&”,在这里它假设打印变量的地址
  • 请查看此处的格式选项:

    Println
    使用默认的
    %v
    ,如果要打印指针的值,可以使用
    %p
    格式,如下所示:

    fmt.Printf("Pointer-Closing %p\n", xp2)
    
  • 为什么延迟函数不反映“xp2”变量的最新值
  • 请看这里:

    因此,在那里计算
    延迟时,指针正在引用第一个对象,因此输出与预期一致

  • 为什么它在实际输出中显示为“&”,在这里它假设打印变量的地址
  • 请查看此处的格式选项:

    Println
    使用默认的
    %v
    ,如果要打印指针的值,可以使用
    %p
    格式,如下所示:

    fmt.Printf("Pointer-Closing %p\n", xp2)
    
  • 为什么延迟函数不反映“xp2”变量的最新值
  • 请看这里:


    因此,在那里计算
    延迟时,指针正在引用第一个对象,因此输出与预期一致。

    感谢您提供的详细答案。理解第#1点,但是否有任何方法可以在执行延迟函数时引用最新值?我已经更新了我的问题,我使用了指针来传递到延迟函数@eugenioy这样做对吗?@ShailendraSoni,“有没有办法在执行延迟函数时引用最新的值?”是的,有一个结尾:谢谢你的详细回答。理解第#1点,但是否有任何方法可以在执行延迟函数时引用最新值?我已经更新了我的问题,我使用了指针来传递到延迟函数@eugenioy这是正确的方法吗?@ShailendraSoni,“是否有任何方法在执行延迟函数时引用最新值?”是的,带有一个闭包: