最佳答案
新手上路。遇到了这个错误,却没有找到原因或理由:
如果我创建一个结构,我可以很明显地分配和重新分配值没有问题:
type Person struct {
name string
age int
}
func main() {
x := Person{"Andy Capp", 98}
x.age = 99
fmt.Printf("age: %d\n", x.age)
}
但如果结构是映射中的一个值:
type Person struct {
name string
age int
}
type People map[string]Person
func main() {
p := make(People)
p["HM"] = Person{"Hank McNamara", 39}
p["HM"].age = p["HM"].age + 1
fmt.Printf("age: %d\n", p["HM"].age)
}
我得到 cannot assign to p["HM"].age
。就是这样,没有其他信息。 http://play.golang.org/p/VRlSItd4eP
我找到了一个解决这个问题的方法——在 Person 上创建一个 incrementAge
函数,可以调用它,并将结果分配给 map 键,例如 p["HM"] = p["HM"].incrementAge()
。
但是,我的问题是,这个“无法分配”错误的原因是什么,为什么不允许我直接分配结构值?