在下面的代碼:接口,映射鍵
package main
import (
"fmt"
)
type Object interface {
String() string
}
type Person struct {
Name string
}
func (p *Person) String() string {
return fmt.Sprintf("person: %s", p.Name)
}
func main() {
dict := map[Object]int{
&Person{Name: "xyz"}: 4,
&Person{Name: "gle"}: 2,
&Person{Name: "kp3"}: 7,
}
fmt.Println(dict[&Person{Name: "xyz"}])
}
它只是打印0
,因爲地圖的鍵是Objects
,這是接口。我知道爲什麼會發生這種情況,但有什麼辦法可以解決它嗎?我想能夠有一個映射,其鍵是接口類型,但我仍然可以訪問字段。
我想到目前爲止唯一的方法是遍歷每個鍵,並檢查鍵是否等於我正在搜索的東西,但它可能會顯着減慢。
這看起來像一個可能的[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - 你究竟想要完成什麼? Map鍵通常應該只是鍵,如果你需要從它們到你想要的接口類型的行爲,你可能需要考慮一種不同的方法。 – Adrian
我的鍵是接口類型的原因是因爲我正在製作一種程序可以製作地圖的語言,其中鍵_and_值都是相同的類型:一個對象。 – Zac
這並不意味着解釋器應該使用Go'map'來實現該語言的地圖。 – Adrian