Home > Backend Development > Golang > How Does append() Affect Slices in Go?

How Does append() Affect Slices in Go?

Mary-Kate Olsen
Release: 2024-11-15 13:54:02
Original
713 people have browsed it

How Does append() Affect Slices in Go?

Understanding the Behavior of append() on Slices

Despite the initial assumptions of slice as a pointer, the provided code demonstrates that the append() operation does not directly affect the original slice. This is because, in Go, everything is passed by value, including slices. So when you pass a slice to a function or assign it to a new variable, you are only passing a copy of the slice header.

The slice header contains information such as the length of the slice, its capacity, and a pointer to the underlying array. When the append() operation is performed on a slice, a new array is allocated if necessary to accommodate the new elements. The slice header is then updated to point to the new array, and the new elements are copied over. This new slice header is returned as the result of the append() call.

In the example code, you assign the return value of the append() operation to the slice1 variable. This means that slice1 now points to a different array than slice. Any changes made to the elements of slice1 will not be reflected in slice, and vice versa.

To achieve the behavior where both slice and slice1 refer to the same array, you would need to use a pointer to a slice instead of a slice itself. For example:

func main() {
    slice := make([]int, 10, 10)
    slice[0] = 0
    slice[1] = 1

    slicePtr := &slice
    slice1 := *slicePtr
    slice1[0] = 10000
    fmt.Println(slice)

    *slicePtr = append(*slicePtr, 100)
    (*slicePtr)[0] = 20000

    fmt.Println(slice)
}
Copy after login

In this example, both slice and slice1 point to the same underlying array, so any changes made to one will be visible in the other.

The above is the detailed content of How Does append() Affect Slices in Go?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template