Dictionary 结构作为Go映射中的键
我正在研究在golang maps中使用结构作为键。这个结构中的一个字段也应该是一个映射,这似乎与提供的文档不符,文档中说只有那些具有可以与Dictionary 结构作为Go映射中的键,dictionary,go,data-structures,Dictionary,Go,Data Structures,我正在研究在golang maps中使用结构作为键。这个结构中的一个字段也应该是一个映射,这似乎与提供的文档不符,文档中说只有那些具有可以与==和进行比较的字段的结构=可以位于用作映射中键的结构的字段中。然而,我继续尝试以下方法: package main import "fmt" import "strings" func main() { fmt.Println("Hello, 世界") fmt.Println(strings.Join([]string{"obi", "
==
和进行比较的字段的结构=代码>可以位于用作映射中键的结构的字段中。然而,我继续尝试以下方法:
package main
import "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$56
testing map[obi:0.003] go home
testing2 map[obi:0.003] come home
这似乎与文档不符,因为结构中用作键的字段是映射。我似乎弄错了什么?在您的示例中,映射键是指向结构的指针,而不是结构本身。即使指针指向的项目无法比较,也可以对指针进行相等性比较。此比较不基于项的内容,而仅基于其内存地址。只有可比较的类型可以用作键(=,!=)。
如果结构(不是指针)只包含可比较的类型,则它是可比较的。问题,在某些情况下,将映射的键设置为x类型的指针是否合理?当然,当您对对象的标识比对其内容的相等性更感兴趣时。例如,您可以在web服务器中以map[*http.request]字符串或其他形式存储一些额外的每个请求数据。