猿问

不同的指针是否相等?

我试图将二维平面上的一些点表示为整数对。我希望这些点是不可变的(按值传递),而且每个点都具有唯一的标识。为了实现这一点,我用两个ints 和一个*string. 这工作正常:


package main

import "fmt"

func main() {

    s1 := ""

    s2 := ""

    p := Point{1,2,&s1}

    p2 := Point{1,2,&s2}

    fmt.Println(p2==p) // want false

}

type Point struct{X int; Y int; id *string}

$ go run a.go

false

由于string实际上并没有用于任何事情(我只关心判断两个点是否相同),因此创建像这样的唯一引用的规范解决方案似乎是使用指向的指针struct{}:


package main

import "fmt"

func main() {

    s1 := struct{}{}

    s2 := struct{}{}

    p := Point{1,2,&s1}

    p2 := Point{1,2,&s2}

    fmt.Println(p2==p) // want false

}

type Point struct{X int; Y int; id *struct{}}

但是,现在两个指针相等:


$ go run a.go

true

为什么?字符串也会发生这种情况吗?我应该改用 UUID 吗?


慕雪6442864
浏览 251回答 2
2回答
随时随地看视频慕课网APP

相关分类

Go
我要回答