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.