ローカルマシンのGoのバージョン:go version go1.14 darwin/amd64
A Tour of Goで、Sliceへのappendを解説する、以下のコードがあります。
go
1package main 2 3import "fmt" 4 5func main() { 6 var s []int 7 printSlice(s) 8 9 // append works on nil slices. 10 s = append(s, 0) 11 printSlice(s) 12 13 // The slice grows as needed. 14 s = append(s, 1) 15 printSlice(s) 16 17 // We can add more than one element at a time. 18 s = append(s, 2, 3, 4) 19 printSlice(s) 20} 21 22func printSlice(s []int) { 23 fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s) 24}
ローカルでの実行結果は以下となります。
zsh
1➜ a-tour-of-go git:(master) ✗ go run more-types/46-appending-to-a-slice/main.go master 2len=0 cap=0 [] 3len=1 cap=1 [0] 4len=2 cap=2 [0 1] 5len=5 cap=6 [0 1 2 3 4]
実行結果4行目cap=6
の理由を教えて頂けないでしょうか。
[0 1 2 3 4]
なので、capacityも5
になると考えました。
余談ですが、A Tour of Goの画面右のPlayGroundで実行すると
go
1len=0 cap=0 [] 2len=1 cap=2 [0] 3len=2 cap=2 [0 1] 4len=5 cap=8 [0 1 2 3 4]
となり、4行目がcap=8
となっており、さらに混乱しました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。