Modifying Arrays Passed to Functions in Go
Contrary to some programming languages, Go does not implicitly pass arrays by reference. When an array is passed to a function, only its value is copied. Therefore, modifications made to the passed array within the function will not affect the original array.
However, in Go, arrays are not explicitly declared. Instead, we work with slices, which are dynamic, resizable views of underlying arrays. When a slice is passed to a function, only the slice descriptor is copied, which includes a pointer to the underlying array, its length, and its capacity.
As a result, any changes made to the elements of the slice within the function will be reflected in the original slice, as they all refer to the same underlying array.
Consider the following code example:
<code class="go">func main() { tab := []int{1, 2, 3} fmt.Println(tab) // [1 2 3] reverse(tab) fmt.Println(tab) // [3 2 1] } func reverse(tab []int) { for i, j := 0, len(tab)-1; i < j; i, j = i+1, j-1 { tab[i], tab[j] = tab[j], tab[i] } }</code>
In this example, the reverse function receives a slice tab. Modifications made to the slice tab within the function, such as swapping elements, will affect the original slice because they both refer to the same underlying array.
Therefore, when passing an array to a function in Go, remember that only the slice descriptor is copied. Any modifications made to the elements of the slice within the function will be reflected in the original slice due to its reference to the underlying array.
The above is the detailed content of How do modifications to arrays passed to functions work in Go?. For more information, please follow other related articles on the PHP Chinese website!