次のコードでは、出力には何も表示されませんが、copy 関数は実際に実行されています。これはなぜでしょうか。
var iArray1 = []int{0, 1, 2, 3, 4, 5, 6}
var iArray2 []int
copy(iArray2, iArray1)
for _, v := range iArray2 {
fmt.Printf("v: %v\n", v)
}
データを調べたところ、go の元の copy() は小さい方の配列スライスの要素数に応じてコピーするものであることがわかりました。上記の実行で結果が得られない理由は、iArray2 という名前のスライスには初期値がなく、定義後の定義長もないため、デフォルトが 0 であるため、iArray1 が iArray2 にコピーされますが、0 しかコピーされないため、出力結果はありません。
次に、これを変更して、iArray2 に初期長を与えましょう。
赤い矢印の位置を注意深く見て、iArray2 に 10 の長さを与えてから、copy() を実行して、iArray1 を iArray2 にコピーします。出力を確認すると、確かにコピーは成功しましたが、以下の項目はすべて 0 です。その理由はやはり、iArray1 が iArray2 にコピーする値は 7 つだけであるため、iArray1 の残りの 3 つの値は上書きされず、デフォルトでは 0 のままです。