C'è il tipo Company, che è una struttura, contenente una mappa di Person, che sono anche tutte le strutture.Chiamare un metodo puntatore su una struttura in una mappa
type Company struct {
employees map[int]Person
}
type Person struct {
[...]
}
Dopo aver assegnato alcune persone alla mappa dipendenti, sto provando a chiamare un metodo puntatore su ognuna di queste.
func (company *Company) Populate(names []string) {
for i := 1; i <= 15; i++ {
company.employees[i] = Person{names[i - 1], [...]}
company.employees[i].Initialize()
}
}
fallisce miseramente Questo, con il go-compilatore lamentarsi che non posso chiamare i metodi puntatore su company.employees [i], così come non posso prendere l'indirizzo del company.employees [i]. Tuttavia, l'impostazione della inizializzazione-metodo per un metodo non puntatore e lasciandolo restituire la copia della persona, e l'assegnazione alla mappa nuovamente utilizzando
company.employees[i] = company.employees[i].Initialize()
opere, che non è quello diverso.
Non avendo mai lavorato con i puntatori, questo mi dà fastidio. Le mappe non sono immutabili e vengono modificate in entrambi i casi, quindi chiamare un metodo puntatore su un'entità in una mappa non dovrebbe essere un problema, almeno nella mia testa.
Se qualcuno potesse spiegarmi cosa sto facendo male qui - o correggere il mio pensiero - sarei lieto.
Grazie mille per averlo chiarito. Ho seguito entrambi i vostri suggerimenti e rimosso il metodo Initialize (sebbene fosse comunque solo un nome temporaneo) e ho creato una funzione NewPerson() contenente quel bit di codice e restituendo una persona inizializzata. Uso di un indirizzamento di mappe I puntatori di persona hanno generato meno e - insieme a NewPerson() - codice più comprensibile. –