見出し画像

golang スライスに要素を追加するappend関数の使い方 遅さには注意

今回はgolangにおけるappend関数の使い方や注意点について解説していきます。


append関数とは

append関数とはスライスに要素を追加する際に用いる関数です。

スライスについては以前に以下の記事で解説しているので、先に目を通していただくと理解がより深まるかと思います。

appendは追記する、付け加えるという意味があり、その意味の通りスライスに要素を付け加えるという関数です。


append関数の使い方

実際にコードを用意したので見てみましょう。

	a := []int{1, 2, 3, 4, 5}
	a = append(a, 10, 20)
	fmt.Println(a)

要素1,2,3,4,5というint型のスライスaがあります。こちらに新たに要素を加えていきましょう。

append()の最初の引数には追加元のスライスを渡してあげる必要があります。その後の引数は入れてあげたいint型の値を記載します。

これによりaの中身を出力するPrintln()の結果は[1 2 3 4 5 10 20]と出力され、スライスaに10,20が追加されました。


append関数の注意点

append関数は便利な関数ではありますが、いくつか注意点があります。


パフォーマンスを気にすること

appendはスライスの要素数を拡張します。

その際、スライスのキャパシティを確認し、容量を確保して要素を追加します。スライスの宣言時にキャパシティも定義できますが、それ以上の要素を追加しようとするとコストがかかります。

スライスのキャパシティについては以下の記事で解説していますので、気になる方はご覧ください。

そのためfor文などを使用してキャパシティを増やしていくのはパフォーマンス的に悪いため、事前に必要な要素数や最大量が分かっている場合make関数を使ってあらかじめキャパシティを指定するのが効率が良いといえます。

以下のように要素数が増えていくスライスを使う場合は、あらかじめ大きめのキャパシティを指定して、メモリを確保しておきましょう。

a := make([]int, 0, 100)


元のスライスの変更

 appendで新しい要素を割り当てる場合、元のスライスと新しいスライスが異なるデータを参照しているため元のスライスは変更されません。


返り値を使用する

append関数は、変更されたスライスを返します。
この返り値を使用してスライスを更新することで、元のスライスに新しい要素を反映することができます。


golangをもっと詳しくなりたい方に

初めてのGo言語

Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。


詳解Go言語Webアプリケーション開発

こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。

以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。


【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)

まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。

この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。


現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発

個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。

以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。

※本ページではアフィリエイトリンク(PR)が含まれています


この記事が参加している募集

この経験に学べ

この記事が気に入ったらサポートをしてみませんか?