我想我明白了答案从here但为了以防万一,我要明确地询问以下(我的道歉,如果你认为它是同样的问题,但对我来说,感觉不同在关注):复制引用指针或值
func f() *int {
d := 6
pD := new(int)
pD = &d // option 1
*pD = d // option 2
return pD
}
,我只是复制引用作为指针的第一个选项是性能的角度来看,更优化的(这是教育的猜测,但它似乎是显而易见的)。我更喜欢这种方法/模式。
第二种办法(浅)复印件(?)来代替。我认为这种方法,因为它复制,我不担心GC扫描'd'的实例。由于我的不安全感(或者作为初学者无知),我经常使用这种方法。
我所关心的(或者更加不安全的)是,在第一种方法中('d'的地址被转移),GC会认识到它('d'变量)被一个指针容器,因此它不会被扫描?因此,使用这种方法是安全的吗?即我可以安全地传递从func'f()'返回的指针'pD'来获取应用程序的整个生命周期吗?
参考:https://play.golang.org/p/JWNf5yRd_B