7

How to append anything (element, slice or string) to a slice

 3 years ago
source link: https://yourbasic.org/golang/append-explained/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

How to append anything (element, slice or string) to a slice

yourbasic.org/golang
toddler-fiat-with-trailer.jpg

Append function basics

With the built-in append function you can use a slice as a dynamic array. The function appends any number of elements to the end of a slice:

  • if there is enough capacity, the underlying array is reused;
  • if not, a new underlying array is allocated and the data is copied over.

Append returns the updated slice. Therefore you need to store the result of an append, often in the variable holding the slice itself:

a := []int{1, 2}
a = append(a, 3, 4) // a == [1 2 3 4]

In particular, it’s perfectly fine to append to an empty slice:

a := []int{}
a = append(a, 3, 4) // a == [3 4]

Warning: See Why doesn’t append work every time? for an example of what can happen if you forget that append may reuse the underlying array.

Append one slice to another

You can concatenate two slices using the three dots notation:

a := []int{1, 2}
b := []int{11, 22}
a = append(a, b...) // a == [1 2 11 22]

The ... unpacks b. Without the dots, the code would attempt to append the slice as a whole, which is invalid.

The result does not depend on whether the arguments overlap:

a := []int{1, 2}
a = append(a, a...) // a == [1 2 1 2]

Append string to byte slice

As a special case, it’s legal to append a string to a byte slice:

slice := append([]byte("Hello "), "world!"...)

Performance

pink-coins-thumb.jpg

Appending a single element takes constant amortized time. See Amortized time complexity for a detailed explanation.

Further reading

orange-thumb.jpg

Slices and arrays in 6 easy steps

Share:             


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK