すべての構造体である Person のマップを含む、構造体である Company 型があります。
type Company struct {
employees map[int]Person
}
type Person struct {
[...]
}
一部の Person を employees-map に割り当てた後、これらのそれぞれでポインタ メソッドを呼び出そうとしています。
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 メソッドを非ポインター メソッドに設定し、 person のコピーを返してもらい、それを使用して再度マップに割り当てます。
company.employees[i] = company.employees[i].Initialize()
動作しますが、それほど違いはありません。
ポインタを扱ったことがないので、これは私を非常に悩ませます。マップは不変ではなく、どちらの方法でも変更されるため、マップ内のエンティティでポインター メソッドを呼び出すことは問題にならないはずです-少なくとも私の頭の中では。
ここで私が間違っていることを誰かが説明してくれたり、私の考えを正してくれたりしたら、私は喜んでいます。