JavaScriptを有効にしてください

Golang: appendの挙動

 ·  ☕ 1 min read
1
2
s := append(str[:j], hoge...)
s = append(s, str[j:]...)
  • こういうコードでバグるときがある

  • そもそもappendとはどういうものか?

    • append(str[:j](https://scrapbox.io/yuwd/%3Aj),hoge...)をすると, appendはまずcap(str)を見る
      • cap(str)hogeが入りきらないとわかると, より長い配列を作成して, str[:j](https://scrapbox.io/yuwd/%3Aj)hogeをconcatしたものを コピーし直す
      • cap(str)hogeが入るとわかると, strの![]($ j](https://scrapbox.io/yuwd/%5D%28%24%20j)番目以降に容赦なくhogeを上書きす)
      • ↑ こいつが原因
  • なので, appendは後ろ向きに考えてappend(hoge, str[j:](https://scrapbox.io/yuwd/j%3A)...)を先に生成すると良い

    • s := append(str[:j](https://scrapbox.io/yuwd/%3Aj), append(hoge, str[j:](https://scrapbox.io/yuwd/j%3A)...)...)
  • 結論: Golangはキモい

共有

YuWd (Yuiga Wada)
著者
YuWd (Yuiga Wada)
機械学習・競プロ・iOS・Web