14
golangマップで構造体をキーとして使用する方法を検討していました。この構造体のフィールドもマップであると考えられています。hereのドキュメントには、==
および!=
と比較できるフィールドしかない構造体しかキーとして使用されている構造体地図で。しかし私は、以下しようとする先に行ってきました:構造体をGoマップのキーとして使用する
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型のポインターにするのがもっともらしい場合がありますか? – Roylee
もちろん、コンテンツの平等よりもオブジェクトのアイデンティティに興味があるのは確かです。たとえば、Webサーバーにリクエストごとの余分なデータをマップ[* http.Request]の文字列などで格納することができます。 – andybalholm
thats良いこと、ありがとう;) – Roylee