On Tue, Sep 20, 2016, at 03:23 PM, Gabriel Adumitrachioaiei wrote: > I don't understand something when I want to pop out first element of a > slice and use it. > Here is my version: > > s := []int{1,2,3} first := s[] s = s[1:] > > > Here is a version that I saw in the standard library: > https://golang.org/src/database/sql/sql.go#L791 > > first := s[] copy(s, s[1:]) s = s[:len(s) - 1] > > > I wonder, why do we need to translate the other elements to the left > with a copy ? > In the first case, I guess the first element will still be found in > the underlying array, and in the second case the last element. > It's not like for avoiding a memory leak, because neither version > allocates a new underlying array.
If you append to the slice in the second version then the new element will reuse the space at the end of the backing array. In the first version Go may have to allocate to expand the backing array since there is no spare capacity. Ian -- 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.