LoginSignup
0
0

appendメソッドの初期容量以上の要素を追加したときに起こること

Posted at

実装

  s4 := make([]int, 0, 4)
	fmt.Println(s4, len(s4), cap(s4))
	s5 := append(s4, 1, 2, 3, 4, 5, 6, 7, 8, 9)
	fmt.Println(s5, len(s5), cap(s5))
	
	//[] 0 4
  //[1 2 3 4 5 6 7 8 9] 9 10

上記の実装をしたときにs5の容量は初期に設定した以上の要素数を追加しようとしています。そのときにGo言語は、自動的により大きな容量を持つスライスを作成します。今回であれば、最初の1-4までの要素は初期値の容量で入れることができます。しかし、残りの5-9は一度、初期容量の倍の数スライス容量を増やします。それでも足りませんので、Go言語は2のべき条の数容量を追加します。よって、上記の例では倍数容量を追加したときに8となりますが、まだ足りないので、さらに2のべき条ずつ容量を追加します。今回は2だけで足りますので最終的8+2で10となります。

よって、次の実装も下記のような結果になります。

	s76 := append(s4, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
	fmt.Println(s76, len(s76), cap(s76))
	
	// [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] 15 16

参考記事

Go 言語のスライス - Go 言語入門

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0