在Golang中,数组是值类型而切片是引用类型。因此值的复制与切片的复制并不相同。
数组的复制
对于值类型的数组来说,变量指向的并不是第一个元素的指针,而是整个数组。以下情况会发生数组的复制:
- 将数组变量赋值给另一个数组变量
- 将数组变量作为参数传递给方法
举个栗子:
package main
import "fmt"
func main() {
sample1 := [2]string{"a", "b"}
fmt.Printf("Sample1 Before: %v\n", sample1)
sample2 := sample1
sample2[0] = "c"
fmt.Printf("Sample1 After assignment: %v\n", sample1)
fmt.Printf("Sample2: %v\n", sample2)
test(sample1)
fmt.Printf("Sample1 After Test Function Call: %v\n", sample1)
}
func test(sample [2]string) {
sample[0] = "d"
fmt.Printf("Sample in Test function: %v\n", sample)
}
输出
Sample1 Before: [a b]
Sample1 After assignment: [a b]
Sample2: [c b]
Sample in Test function: [d b]
Sample1 After Test Function Call: [a b]