Golang編程語言中的數(shù)組與其他編程語言非常相似。在程序中,有時(shí)我們需要存儲一組相同類型的數(shù)據(jù),例如學(xué)生評分列表。這種類型的集合使用數(shù)組存儲在程序中。數(shù)組是固定長度的序列,用于將同類元素存儲在內(nèi)存中。Golang沒有提供將一個(gè)數(shù)組復(fù)制到另一個(gè)數(shù)組的特定內(nèi)置函數(shù)。但是我們可以通過簡單地通過值或引用將數(shù)組分配給新變量來創(chuàng)建數(shù)組的副本。
如果我們通過值創(chuàng)建數(shù)組的副本并在原始數(shù)組的值中進(jìn)行了一些更改,則它不會反映在該數(shù)組的副本中。 而且,如果我們通過引用創(chuàng)建數(shù)組的副本,并對原始數(shù)組的值進(jìn)行了一些更改,那么它將反映在該數(shù)組的副本中。 如以下示例所示:
語法:
//按值創(chuàng)建數(shù)組的副本 arr := arr1 //通過引用創(chuàng)建數(shù)組的副本 arr := &arr1
讓我們借助示例來討論這個(gè)概念:
范例1:
//按值復(fù)制數(shù)組 package main import "fmt" func main() { //創(chuàng)建和初始化數(shù)組 //使用簡寫聲明 my_arr1 := [5]string{"Scala", "Perl", "Java", "Python", "Go"} //將數(shù)組復(fù)制到新變量中 //在這里,元素按值傳遞 my_arr2 := my_arr1 fmt.Println("Array_1: ", my_arr1) fmt.Println("Array_2:", my_arr2) my_arr1[0] = "C++" //在這里,當(dāng)我們復(fù)制數(shù)組時(shí) //按值放入另一個(gè)數(shù)組 //然后對原始內(nèi)容進(jìn)行更改 //數(shù)組不反映在 //該數(shù)組的副本 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]
通過引用復(fù)制數(shù)組示例:
//通過引用復(fù)制數(shù)組 package main import "fmt" func main() { //創(chuàng)建和初始化數(shù)組 //使用簡寫聲明 my_arr1 := [6]int{12, 456, 67, 65, 34, 34} //將數(shù)組復(fù)制到新變量中 //在這里,元素通過引用傳遞 my_arr2 := &my_arr1 fmt.Println("Array_1: ", my_arr1) fmt.Println("Array_2:", *my_arr2) my_arr1[5] = 1000000 //在這里,當(dāng)我們復(fù)制數(shù)組時(shí) //通過引用放入另一個(gè)數(shù)組 //然后對原始內(nèi)容進(jìn)行更改 //數(shù)組將反映在 //該數(shù)組的副本 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]