On Tuesday, September 5, 2017 at 12:20:02 PM UTC-4, T L wrote:
>
> IMO, I think this is a bug.
>

I mean it can be viewed as a bug for inconsistency.
But from the memory model view, it can also not be viewed as 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