Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
先日SwiftのArrayがヤバイという投稿を書きましたが(ただし、SwiftのArrayはすばらしく生まれかわりました)、実はGoのSliceでもまったく同じことが起きます。 GoのSliceのヤバイ挙動 次のコードはSwiftのArrayがヤバイで取り上げたコードをGoに書き換えたものです。結果はSwiftのときと同じです。 a := []int{11, 22, 33} // a == [11 22 33] b := a // b == [11 22 33] a[0] = 777 // b[0]も777になる a = append(a, 44) a[0] = 888 // b[0]は888にならない appendの結果をaに再代入してるから、そこでSliceの実体が変わってしまってるんだろうと思うかもしれません。しかし、少しだけ変更した次のコードでは、aに再代入しているにも関わらずaと
対象 sliceしか使わないのでarrayのことは知らなくてもいいと思っているGopher 内容 arrayを理解するとsliceをもっと理解できる 参考 以下のページを主に参考にしたのでちゃんと知りたい場合はこっちを読んだほうがいい The Go Blog - Go Slices: usage and internals The Go Blog - Arrays, slices (and strings): The mechanics of 'append' きっかけ サイズを指定して宣言したsliceが引数の型チェックに引っかかり悩む、というおそらくは初歩的なつまづきをしてしまった。 func main() { s := [3]int{} takeSlice(s) // Error: cannot use s(type [3]int) as type []int in argument
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く