On Wed, 23 May 2018 13:29:17 +0530 Sankar P <sankar.curios...@gmail.com> wrote:
> I extracted the confusing part alone, when appending to an array, the > items are different than the resultant array into a separate go > program. > > The Playground URL is: https://play.golang.org/p/BJM0H_rYNdb > > If someone can explain the output I would be thankful. It feels like > a bug to me, but I am sure that I am only misunderstanding and it may > not be a bug. Maybe this makes it clearer: https://play.golang.org/p/YolkDuYzrW8 There are 2 things to realize: a) arrays are VALUES in Go, not pointers like in C. This means that the loop variable i is not a pointer, it's an actual independent array that has its own storage not shared with any of the arrays that are stored as keys in the map. At the start of the first iteration of the map, the numbers 1,2,3 are COPIED from the memory of the key [1,2,3] stored in m1 to the memory of i. At the start of the 2nd iteration of the loop, the numbers 4,5,6 are COPIED from the memory of the key [4,5,6] stored in m1 to the memory of i. This overwrites the memory of i. b) slices are a triples of a pointer, a length and maximum length(capacity). Length and capacity are not relevant to understanding this issue. So for the purposes of this issue, you can consider a slice as a pointer. This means that the expression i[:] creates a pointer to the storage address of i. Because i does not change its storage for the whole duration of the loop, the expression i[:] is always the same. It's a pointer to the storage that during the 1st iteration of the loop contains 1,2,3 and during the 2nd iteration contains 4,5,6. You can see this in my playground example. The printed pointer address is the same in both cases. Taken together this means that at the end of the program, b contains 2 copies of the same (address,length,capacity) triple with address pointing to the storage of i (which because Go is garbage collected remains valid). The storage of i contains the last value copied to it, which is 4,5,6. MSB -- If you do not fear death, how can you love life? -- 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.