当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么这些golang指针不相等?》经验,为你挑选了1个好方法。

在下面的例子中,我检查两个指针​​的相等性

指针指向相同的地址

它们不是同一个指针

如何检查两个指针​​是否指向同一个地址?我希望检查两个指针的内容是相同的.

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

}

去游乐场



1> Logiraptor..:

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

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有