在Go语言中,数组是值类型(value type),而不是引用类型(reference type)。这意味着当你将一个数组赋值给另一个变量时,实际上是将整个数组的内容复制一份,而不是简单地复制一个指向数组的引用。
package main
import "fmt"
func main() {
// 定义一个数组
originalArray := [3]int{1, 2, 3}
// 将数组赋值给另一个变量
copyArray := originalArray
// 修改副本数组
copyArray[0] = 100
// 打印原数组和副本数组
fmt.Println("Original Array:", originalArray) // 输出: [1 2 3]
fmt.Println("Copy Array:", copyArray) // 输出: [100 2 3]
}
值类型:在Go语言中,数组是值类型。当你将一个数组赋值给另一个变量时,Go会创建一个新的数组,并将原数组的所有元素逐个复制到新数组中。因此,copyArray
是 originalArray
的一个完全独立的副本。
修改副本:当你修改 copyArray
时,你只是在修改这个副本,而不会影响 originalArray
。因为它们是两个完全独立的内存区域。
引用类型:如果你希望修改副本时也影响原数组,可以使用切片(slice)或指针(pointer)。切片和指针是引用类型,它们指向相同的内存区域。
package main
import "fmt"
func main() {
// 定义一个切片
originalSlice := []int{1, 2, 3}
// 将切片赋值给另一个变量
copySlice := originalSlice
// 修改副本切片
copySlice[0] = 100
// 打印原切片和副本切片
fmt.Println("Original Slice:", originalSlice) // 输出: [100 2 3]
fmt.Println("Copy Slice:", copySlice) // 输出: [100 2 3]
}
在这个例子中,originalSlice
和 copySlice
都指向同一个底层数组,因此修改 copySlice
会影响到 originalSlice
。
如果你希望修改副本时也影响原数组,可以考虑使用切片或指针。