Well, that program isn't that simple because of the closure, but also because it contains a data race
Something like this is easier to reason about var x *int func main() { var a int x = &a fmt.Println(*x) } On Wednesday, 22 March 2017 21:59:17 UTC+11, T L wrote: > > > > On Wednesday, March 22, 2017 at 6:40:53 PM UTC+8, Jesse McNelis wrote: >> >> On Wed, Mar 22, 2017 at 8:51 PM, T L <tapi...@gmail.com> wrote: >> > >> > More accurately, I think it should be: from the POV of a programmer, >> it's >> > globals, and things reachable from each goroutine. >> > >> >> The only way to reach a value is through a variable in scope and the >> only variables in scope are global or on the stack. >> >> 'heap pointers of local allocated memory blocks' are stored where ever >> you put them, but you can only put them in places you can find by >> using global or local stack variables. >> > > So for this simple program: > > func main() { > var a int > go func() { // new goroutine > a++ > }() > > // ... > } > > a will be allocated on heap. > a is referenced by both stack of main and the new goroutine? > how is it referenced, the pointer of a's memory block is stored in both > stacks? > -- 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.