【发布时间】:2026-02-10 13:55:01
【问题描述】:
在下面的例子中,我检查两个指针的相等性
- 指针指向同一个地址
- 它们不是同一个指针
如何检查两个指针是否指向同一个地址?我不想检查两个指针的内容是否相等。
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
}
【问题讨论】:
-
在您的代码中,func (m1 Map) NewFragment 对值而不是指针进行操作。如果将其更改为 func (m1 *Map) NewFragment() 等,则两个 Println 都将返回 true。我不确定您希望该程序如何工作。
-
使用
==。如果指针指向同一个变量,则它们具有相同的地址。来自规范:Pointer values are comparable. Two pointer values are equal if they point to the same variable or if both have value nil.