我试图将二维平面上的一些点表示为整数对。我希望这些点是不可变的(按值传递),而且每个点都具有唯一的标识。为了实现这一点,我用两个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 吗?
相关分类