go語言的內建函式 copy() 可以將乙個陣列切片複製到另乙個陣列切片中,如果加入的兩個陣列切片不一樣大,就會按照其中較小的那個陣列切片的元素個數進行複製。
copy() 函式的使用格式如下:
copy
( destslice, srcslice [
]t)int
其中 srcslice 為資料**切片,destslice 為複製的目標(也就是將 srcslice 複製到 destslice),目標切片必須分配過空間且足夠承載複製的元素個數,並且**和目標的型別必須一致,copy() 函式的返回值表示實際發生複製的元素個數。
下面的**展示了使用 copy() 函式將乙個切片複製到另乙個切片的過程:
slice1 :=
intslice2 :=
intcopy
(slice2, slice1)
// 只會複製slice1的前3個元素到slice2中
copy
(slice1, slice2)
// 只會複製slice2的3個元素到slice1的前3個位置
雖然通過迴圈複製切片元素更直接,不過內建的 copy() 函式使用起來更加方便,copy() 函式的第乙個引數是要複製的目標 slice,第二個引數是源 slice,兩個 slice 可以共享同乙個底層陣列,甚至有重疊也沒有問題。
【示例】通過**演示對切片的引用和複製操作後對切片元素的影響。
package main
import
"fmt"
func
main()
// 引用切片資料
refdata := srcdata
// 預分配足夠多的元素切片
copydata :=
make([
]int
, elementcount)
// 將資料複製到新的切片空間中
copy
(copydata, srcdata)
// 修改原始資料的第乙個元素
srcdata[0]
=999
// 列印引用切片的第乙個元素
fmt.
println
(refdata[0]
)// 列印複製切片的第乙個和最後乙個元素
fmt.
println
(copydata[0]
, copydata[elementcount-1]
)// 複製原始資料從4到6(不包含)
copy
(copydata, srcdata[4:
6])for i :=
0; i <
5; i++
}
**說明如下:
第 8 行,定義元素總量為 1000。
第 11 行,預分配擁有 1000 個元素的整型切片,這個切片將作為原始資料。
第 14~16 行,將 srcdata 填充 0~999 的整型值。
第 19 行,將 refdata 引用 srcdata,切片不會因為等號操作進行元素的複製。
第 22 行,預分配與 srcdata 等大(大小相等)、同型別的切片 copydata。
第 24 行,使用 copy() 函式將原始資料複製到 copydata 切片空間中。
第 27 行,修改原始資料的第乙個元素為 999。
第 30 行,引用資料的第乙個元素將會發生變化。
第 33 行,列印複製資料的首位資料,由於資料是複製的,因此不會發生變化。
第 36 行,將 srcdata 的區域性資料複製到 copydata 中。
第 38~40 行,列印複製區域性資料後的 copydata 元素。
Go語言切片
go語言切片 go語言切片是對陣列的抽象 go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片 動態陣列 與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。宣告乙個未指定大小的陣列來定義切片 var identifier ...
go語言 切片
一 概述 low 陣列下標的起點 high 陣列下標的結束點 不包括此點 arr low arr high len 長度 high low cap 容量 max low 二 切片的長度與容量 package main import fmt func main slice arr 0 3 5 fmt....
Go語言 切片
因為陣列的長度是固定的並且陣列長度屬於型別的一部分,所以陣列有很多的侷限性。例如 func arraysum x 3 int int return sum 這個求和函式只能接受 3 int型別,其他的都不支援。再比如,a 3 int陣列a中已經有三個元素了,我們不能再繼續往陣列a中新增新元素了。切片...