Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah append() Mempengaruhi Slices dalam Go?

Bagaimanakah append() Mempengaruhi Slices dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-15 13:54:02713semak imbas

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)
}

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.

Atas ialah kandungan terperinci Bagaimanakah append() Mempengaruhi Slices dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn