IMO, I think this is a bug. On Tuesday, September 5, 2017 at 12:16:56 PM UTC-4, T L wrote: > > BTW, the following one also prints 10. > > package main > > import ( > "fmt" > "time" > ) > > func main() { > var num = 10 > var p = &num > > c := make(chan int) > > go func() { > c <- *p * 1 // with this line we will get 11 from channel c > //c <- num // with this line we will get 10 from channel c > }() > > time.Sleep(time.Second) > num++ > fmt.Println(<-c) > > //fmt.Println(p) > } > > On Tuesday, September 5, 2017 at 12:13:51 PM UTC-4, T L wrote: >> >> The program is really racy, but the result is also really some >> counter-intuitive. >> The following program also print 10, which means evaluation of pointer >> dereference >> is some different to evaluation of other expressions in flow. >> >> package main >> >> import ( >> "fmt" >> "time" >> ) >> >> func main() { >> var num = 10 >> var p = &num >> >> c := make(chan int) >> >> go func() { >> c <- func()int{return *p}() // with this line we will get 11 from >> channel c >> //c <- num // with this line we will get 10 from channel c >> }() >> >> time.Sleep(time.Second) >> num++ >> fmt.Println(<-c) >> >> fmt.Println(p) >> } >> >> On Monday, September 4, 2017 at 10:35:32 PM UTC-4, Jesse McNelis wrote: >>> >>> On Tue, Sep 5, 2017 at 10:34 AM, Marlon Che <rob1...@gmail.com> wrote: >>> > Hi everyone! >>> > Please help me figure out the two different results of following code: >>> > >>> > package main >>> > >>> > import ( >>> > "fmt" >>> > "time" >>> > ) >>> > >>> > func main() { >>> > var num = 10 >>> > var p = &num >>> > >>> > c := make(chan int) >>> > >>> > go func() { >>> > c <- *p // with this line we will get 11 from channel c >>> > //c <- num // with this line we will get 10 from channel c >>> > }() >>> > >>> > time.Sleep(2 * time.Second) >>> > num++ >>> > fmt.Println(<-c) >>> > >>> > fmt.Println(p) >>> > } >>> >>> You have a data race, what value you get from dereferencing p is >>> undefined, it could be 10, it could be 11, it could wipe your >>> harddrive or launch the missiles. >>> >>
-- 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.