Goでスライスをコピーする関数があります。
func copy(dst, src []Type) int
戻り値は「コピーが成功した要素の数」です。
注意点として、dst
とsrc
の長さが短いほうのぶんだけしかコピーされません。なので、
arr := []int{1, 2, 3} tmp := []int{} copy(tmp, arr)
は、len(tmp) == 0
なので、最大コピー数は0、つまりコピーなんてされません。
fmt.Println(tmp) // [] fmt.Println(arr) // [1 2 3]
解決策として、予めコピー元のサイズを求めてmake
しておく手がありますが、書くのめんどくせぇです。
// あらかじめサイズを確保して作っておく tmp := make([]int, len(arr)) copy(tmp, arr)
愚直です。
空のスライスにコピー元をまるごとappend
で追加したやつが1行も短く書けます。
tmp := append([]int{}, arr...)
速度とかは知りません。