goパッケージのアップデートがどうやら激しいようで、
hg updateかけないと仕様のページ書いてあることも実行でないようです。
今日は、goパッケージのアップデートにより使用可能となりました、
copy(dst, src []T)についてご説明。
go言語の「スライス」がもっと便利になればいいのに!
そう思っていた人も多いはず。
そこで、まずappendが使用可能になりました!
これで使用頻度は5割増しだ。
文法は
append(アペンドされるスライス, アペンドするオブジェクト)でございます。
var a []int{0,1,2}
b := append(a, 3)
// b == []int{0, 1, 2, 3}
次にcopyが可能になりました。
早速スライスをコピーして別のスライスを用意していじって見ましょう。
文法は
copy(コピー先スライス, コピー元スライス)でございます。
【まずは失敗作1】
var a []int{0,1,2}
b := a
edit(a); output(a); output(b)
ぉ、スライスはポインタであるらしいことを忘れていました!
だから、ポインタをコピーしても、元のaとbは同じものを参照しているのです。
【次に失敗作2】
var a []int{0, 1, 2}
b := a
copy(a, b)
edit(a); output(a); output(b)
もちろんこれでもだめ。
bはただのaのコピーロボット。
aの実体が編集されればbも編集されているということ。
【成功例】
var a []int{0, 1, 2}
b := make([]int(len(a))
copy(b, a)
edit(a); output(a); output(b)
これでaとbは違う実体を持つことができる。
これでこそコピー
No comments:
Post a Comment