構造体であるCompany型があり、Person型のマップも含まれています。これらの構造体もすべて構造体です。マップ内の構造体にポインタメソッドを呼び出す
type Company struct {
employees map[int]Person
}
type Person struct {
[...]
}
従業員マップにいくつかのPersonを割り当てた後、私はこれらのそれぞれに対してポインタメソッドを呼び出そうとしています。ゴーコンパイラでこの無残に失敗した
func (company *Company) Populate(names []string) {
for i := 1; i <= 15; i++ {
company.employees[i] = Person{names[i - 1], [...]}
company.employees[i].Initialize()
}
}
、私はcompany.employees上のポインタのメソッドを呼び出すことができないことを訴えて[i]を、だけでなく、私はcompany.employeesのアドレスを取ることができないよう[i]。しかし 、非ポインタ方法に初期化メソッドを設定し、それが人のコピーを返すせ、それではありません
company.employees[i] = company.employees[i].Initialize()
作品を、使用して再びマップにそれを割り当て異なる。
これまで指針で作業していなかったので、これは私にとってかなりバグです。マップは不変ではなく、どちらの方法でも変更されるため、マップ内のエンティティでポインタメソッドを呼び出すことは問題ではありません。
誰でも私がここで間違っていることを説明することができますか、私の考えを修正してください。私は喜んでいます。例えば
これを明確にしていただきありがとうございます。私は両方のヒントを守り、Initializeメソッドを削除しましたが(とにかくそれはちょっとした名前でしたが)、そのビットを含むNewPerson()関数を作成し、初期化された人物を返しました。 Person-pointerを扱ったマップを使用することで、NewPerson()とあまり関係がなくなり、より理解しやすいコードになりました。 –