为了账号安全,请及时绑定邮箱和手机立即绑定

结构体作为 Go 映射中的键

结构体作为 Go 映射中的键

Go
慕后森 2021-07-13 17:05:27
我正在研究在 golang 映射中使用结构作为键。这个结构中的一个字段也应该是一个映射,这似乎与此处提供的文档背道而驰,该文档说只有具有可以比较的字段==并且!=可以位于用作映射中的键的结构的字段中的结构. 但是,我继续尝试以下操作:package mainimport "fmt"import "strings"func main() {    fmt.Println("Hello, 世界")    fmt.Println(strings.Join([]string{"obi", "$", "56"}, ""))    z := make(map[string]float64)    z["obi"] = 0.003    x := &test{        name:"testing",        code:z,    }    a := &test{        name:"testing2",        code:z,    }    y := make(map[*test] string)    y[x] = "go home"    y[a] = "come home"    for key, val := range y{        fmt.Println(key.name, key.code, val)    }}type test struct{    name string    code map[string]float64}输出是:Hello, 世界obi$56testing map[obi:0.003] go hometesting2 map[obi:0.003] come home这似乎与文档背道而驰,因为用作键的结构中的字段是映射。我似乎有什么问题?
查看完整描述

2 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

在您的示例中,映射键是指向结构的指针,而不是结构本身。即使无法比较指针指向的项目,也可以比较指针是否相等。这种比较不是基于项目的内容,而是基于其内存地址。


查看完整回答
反对 回复 2021-07-19
?
MM们

TA贡献1886条经验 获得超2个赞

只有可比较的类型才能用作键 (== ,!=)。如果结构体(不是指针)只包含可比较的类型,则它是可比较的。


查看完整回答
反对 回复 2021-07-19
  • 2 回答
  • 0 关注
  • 312 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信