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 <[email protected]> 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 [email protected].
For more options, visit https://groups.google.com/d/optout.