How to append anything (element, slice or string) to a slice
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
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
Appending a single element takes constant amortized time. See Amortized time complexity for a detailed explanation.
Further reading
Slices and arrays in 6 easy steps
Share:
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK