完全スライス式(フルスライス式)
スライシングするときにキャパシティを指定する記法。
比較的 Go は触るほうだが、これを書くまで知らなかった。
というか使わなさすぎて忘れていた。
slice[low:high:max] のように記述し、容量が max - min であること以外は、slice[low:high] と同じ。
100GoMistakes によると、append による予期せぬ副作用を回避する際に用いられるとのこと。
https://100go.co/ja/#append-25
たとえば下記のコードだと、main と f のスライスは同じ基底配列を参照しているので、f による変更が main にも影響する。
code:go
func main() {
s := []int{1, 2, 3}
f(s:2)
fmt.Println(s) // 1 2 100
}
func f(s []int) {
_ = append(s, 100)
}
これを完全スライス式を用いることで回避できる。
code:go
func main() {
s := []int{1, 2, 3}
f(s:2:2)
fmt.Println(s) // 1 2 3
}
func f(s []int) {
_ = append(s, 100)
}
#Go