Golang 如何把一个数组复制到另一个数组中
Golang或Go编程语言中的数组与其他编程语言很相似。在程序中,有时我们需要存储相同类型的数据集合,如学生的分数列表。这种类型的集合在程序中使用数组来存储。数组是一个固定长度的序列,用来存储内存中的同质元素。Golang并没有提供一个特定的内置函数来将一个数组复制到另一个数组中。但是我们可以通过简单地将一个数组通过值或引用分配给一个新的变量来创建一个数组的副本。
如果我们通过值创建一个数组的副本,并对原始数组的值做了一些改变,那么它将不会反映在该数组的副本中。如果我们通过引用创建一个数组的副本,并对原数组的值做了一些改变,那么它将反映在该数组的副本中。如下面的例子所示。
语法
// creating a copy of an array by value
arr := arr1
// Creating a copy of an array by reference
arr := &arr1
让我们借助于例子来讨论这个概念。
例1 :
// Go program to illustrate how
// to copy an array by value
package main
import "fmt"
func main() {
// Creating and initializing an array
// Using shorthand declaration
my_arr1 := [5]string{"Scala", "Perl", "Java", "Python", "Go"}
// Copying the array into new variable
// Here, the elements are passed by value
my_arr2 := my_arr1
fmt.Println("Array_1: ", my_arr1)
fmt.Println("Array_2:", my_arr2)
my_arr1[0] = "C++"
// Here, when we copy an array
// into another array by value
// then the changes made in original
// array do not reflect in the
// copy of that array
fmt.Println("\nArray_1: ", my_arr1)
fmt.Println("Array_2: ", my_arr2)
}
输出
Array_1: [Scala Perl Java Python Go]
Array_2: [Scala Perl Java Python Go]
Array_1: [C++ Perl Java Python Go]
Array_2: [Scala Perl Java Python Go]
例2 :
// Go program to illustrate how to
// copy an array by reference
package main
import "fmt"
func main() {
// Creating and initializing an array
// Using shorthand declaration
my_arr1 := [6]int{12, 456, 67, 65, 34, 34}
// Copying the array into new variable
// Here, the elements are passed by reference
my_arr2 := &my_arr1
fmt.Println("Array_1: ", my_arr1)
fmt.Println("Array_2:", *my_arr2)
my_arr1[5] = 1000000
// Here, when we copy an array
// into another array by reference
// then the changes made in original
// array will reflect in the
// copy of that array
fmt.Println("\nArray_1: ", my_arr1)
fmt.Println("Array_2:", *my_arr2)
}
输出
Array_1: [12 456 67 65 34 34]
Array_2: [12 456 67 65 34 34]
Array_1: [12 456 67 65 34 1000000]
Array_2: [12 456 67 65 34 1000000]
极客教程