有类型 Company,它是一个结构,包含 Person 的映射,它们也是所有结构。
type Company struct {
employees map[int]Person
}
type Person struct {
[...]
}
在将一些人分配给员工地图之后,我试图在每个人上调用一个指针方法。
func (company *Company) Populate(names []string) {
for i := 1; i <= 15; i++ {
company.employees[i] = Person{names[i - 1], [...]}
company.employees[i].Initialize()
}
}
这悲惨地失败了,go-Compiler 抱怨我无法在company.employees[i]上调用指针方法,也无法获取company.employees[i]的地址。但是,将 Initialize-method 设置为非指针方法并让它返回 person 的副本,并通过使用再次将其分配给地图
company.employees[i] = company.employees[i].Initialize()
工作,这并没有什么不同。
从来没有使用过指针,这让我非常恼火。地图不是一成不变的,它们会以任何一种方式进行修改,因此在地图中的实体上调用指针方法应该不是问题——至少在我的脑海中是这样。
如果有人可以向我解释我在这里做错了什么 - 或者纠正我的想法 - 我会很高兴。