Thanks! Really appreciate the explanation!
On Monday, April 3, 2017 at 6:49:02 AM UTC-7, Val wrote: > > It's a combination of : > 1) A read and a write of a variable, happening without synchronization > (see happens-before <https://golang.org/ref/mem#tmp_2>), is always a > race, and always a bug, even when it "looks" innocuous. > 2) When the receiver of a method is not a pointer, then this receiver is > copied when the method is called. > 3) (*RPC) compute() writes field result. > 4) (RPC) version() copies the whole RPC value, which is a read to field > result. > > There is a data race on rpc.result > > On Sunday, April 2, 2017 at 11:57:59 PM UTC+2, st ov wrote: >> >> Could you explain how this is a race condition? >> Running it in the playground appears to succeed, >> https://play.golang.org/p/zs6T361fc6 >> >> >> >> >> On Saturday, March 25, 2017 at 7:51:52 PM UTC-7, Dragos Harabor wrote: >>> >>> You may also run into subtle races when you mix pointer and value >>> receivers, as seen here: >>> https://dave.cheney.net/2015/11/18/wednesday-pop-quiz-spot-the-race >>> >>> >>> On Friday, March 24, 2017 at 6:20:06 PM UTC-7, st ov wrote: >>>> >>>> Is it idiomatic to mix-&-match pointer and value method receivers for a >>>> given type? >>>> or in *general*, if a single method requires a pointer receiver than *all >>>> methods* should take a pointer, regardless if a value receiver is >>>> appropriate? >>>> >>>> For example, should Foo.SetVal also be a pointer receiver even though a >>>> value receiver would be acceptable? >>>> https://play.golang.org/p/rd_6BLol8O >>>> >>>> type Foo struct{ >>>> ref []int >>>> val int >>>> } >>>> >>>> // would not set if method receiver is value receiver (foo Foo) >>>> func (foo *Foo) SetRef(ref []int) { >>>> foo.ref = ref >>>> } >>>> func (foo Foo) SetVal(val int) { >>>> foo.val = val >>>> } >>>> >>>> func main() { >>>> foo := Foo{} >>>> foo.SetRef([]int{1,2,3}) >>>> foo.SetVal(1) >>>> >>>> fmt.Printf("%v",foo) // {[1 2 3] 0} >>>> } >>>> >>>> >>>> >>>> -- 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. For more options, visit https://groups.google.com/d/optout.