gpt4 book ai didi

pointers - 为什么这些 golang 指针不相等?

转载 作者:IT王子 更新时间:2023-10-29 02:25:14 25 4
gpt4 key购买 nike

在下面的示例中,我检查了两个指针是否相等

  • 指针指向同一个地址
  • 它们不是同一个指针

如何检查两个指针​​是否指向同一个地址?我不想检查两个指针​​的内容是否相等。

package main

import (
"fmt"
)

type Map struct {}
type Fragment struct {
Map *Map
}

func (m1 Map) NewFragment() (f Fragment) {
f.Map = &m1
return
}


var m Map = Map {}

func main() {
f := m.NewFragment()
fmt.Println(f.Map == &m) // false
fmt.Println(*f.Map == m) // true

}

Go Playground

最佳答案

正如 JimB 回答的那样,您可以使用 == 来比较指针。该程序之所以如此,是因为当您调用 NewFragment 方法时,会为接收器制作一个副本。在这种情况下,这意味着 f.Map = &m1 行采用的是 copy 的地址,而不是原始对象的地址。因此,指针不同(f.Map != &m),而值相同(*f.Map == m)。

关于pointers - 为什么这些 golang 指针不相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41862323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com