Go语言内部,切片的结构类型表示为:
type slice struct {
Length int
Capacity int
ZerothElement *byte
}
切片包含长度、容量和指向数组第0个元素的指针。当一个切片被传递给函数时,即使它是通过值传递的,指针变量也会指向相同的底层数组。
因此,当切片作为参数传递给函数时,在函数内部所做的更改,在函数外部也是可见的。让我们写一个程序来验证一下。
package main
import (
"fmt"
)
func subtactOne(numbers []int) {
for i := range numbers {
numbers[i] -= 2
}
}
func main() {
nos := []int{8, 7, 6}
fmt.Println("slice before function call", nos)
subtactOne(nos) //function modifies the slice
fmt.Println("slice after function call", nos) //modifications are visible outside
}
函数内部和外部操作的是同一个切片,这与数组是不同的。
上述程序的输出为:
slice before function call [8 7 6]
slice after function call [6 5 4]