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.

Reply via email to