* Kasun Vithanage <alanka...@gmail.com> [191107 23:47]: > type Foo struct { > Alive bool > } > > type Bar struct { > Foos []*Foo > } > > func (b *Bar) CheckFoosAlive() { > for i := 0; i < len(b.Foos); i++ { > if b.Foos[i].Alive { > fmt.Println("Alive") > } > } > } > > func (b* Bar) MarkFooStatus(index int, status bool){ > // after bound checking > b.Foos[index].Alive = status > }
Volker's answer is very good, but for the simple case where Alive is (or can be) a type that is handled by the atomic package, that is almost certainly the best approach. If the Foo struct is complicated, and you have lots of non-overlapping access to b.Foos (with the occasional overlapping access), I strongly suspect that putting a mutex in Foo and using that will give you the best results. As Volker said, try several different approaches, and measure with loads approximating your real-world scenario. Alternatively, implement the approach that you think is easiest to maintain (from a source code POV), and test to see if the performance is acceptable under load. If it is, don't bother trying to optimize. ...Marvin -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/20191108132521.bkrbxj2lv7wpinuo%40basil.wdw.