先日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と