From 4cf21eff4ecf76455108c9f968fa514e8f8bdd55 Mon Sep 17 00:00:00 2001 From: Marcus Noble Date: Fri, 30 Oct 2020 12:30:56 +0000 Subject: [PATCH] Aded node about Go bug --- content/posts/golang-append.md | 35 ++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 content/posts/golang-append.md diff --git a/content/posts/golang-append.md b/content/posts/golang-append.md new file mode 100644 index 0000000..284ec08 --- /dev/null +++ b/content/posts/golang-append.md @@ -0,0 +1,35 @@ +--- +title: "Golang's append mutates the provided array" +date: 2020-10-30T12:49:37+01:00 +draft: false +tags: + - golang +images: +- /images/golang-append.gif +--- + +A word of warning when using `append()` in Golang... + +When using a slice of an array as the first parameter when calling `append` if the length of the resulting array is less than that of the initial array then the values in the initial array will be overridden by the new values being appended. + +For example, if we use `append` to take the first two values from the array called `first` and all the values from the array called `second` we can see that `first` is being mutated unexpectedly. + +```go +package main + +import "fmt" + +func main() { + first := []int{0, 1, 2, 3, 4, 5, 6} + second := []int{4, 5, 6} + + fmt.Println(first) + // -> [0 1 2 3 4 5 6] + fmt.Println(append(first[:2], second...)) + // -> [0 1 4 5 6] + fmt.Println(first) + // -> [0 1 4 5 6 4 5 6] +} +``` + +This is _only_ an issue when the resulting array is shorter than the array passed in as the first parameter.