[Go言語]ポインタを使って速度改善をしよう!

go

こんにちは。KOUKIです。

Web系企業で、Go言語を使ったAPIの開発業務を行なっています。そして、Go言語について得られた知見を記事にしています。

今日は、ポインタを使った速度改善についてお話しします。

ポインタで速度改善

Go言語はポインタを扱うことができます。ポインタは値のメモリアドレスを指します。

このポインタ、実はGo言語の処理速度に大きく関係するものなのです。

ポインタを使うとメモリの消費を抑えられる」という話はよく聞きますが、恥ずかしながら、速度改善に繋がることは知りませんでした。

というか、今まで具体的なサンプルをみたことがなかったので、意識すらしていませんでした。

ポインタを使わないコード

ポインタを使わなかった時の速度を簡単に計測できるコードを用意しました。

上記のコードでは、固定長「10000000」の配列を持ったhuge構造体を用意しています。

そして、addr()メソッドにて、huge構造体のアドレスをコンソール上に表示します。

main関数内では、このaddr()メソッドを10回呼び出しています。

terminal上で、以下のコマンドを実行してみましょう。

処理が完了するまで、2.270sかかりました。

ポインタを使ったコード

それでは、先ほどのaddr()メソッドをポインタを使った形式に書き換えてみましょう。

今度は、処理が完了するまでに0.347sしかかかりませんでした。

速度が桁違いにアップしました!

考察

addr()メソッドの「(h *huge) 」の部分をレシーバーと呼びますが、ポインタを使っていない場合、このレシーバーは、hのコピーを受け取ります。

hとはすなわち「haves [10000000]string」であり、かなり大容量のデータをループが回るたびに呼び出しています。

しかし、ポインタを使った場合、アドレス情報を示す容量の少ないポインタデータを渡すだけなので、速度が跳ね上がったわけです。※ポインタはメモリのアドレスを示す

おわりに

Go言語はものすごく早いシステムを構築するのに向いている言語です。

そのため、私も日々、速度改善を意識したコードを書く必要に迫られています。

これからもこういうナレッジを共有したいと思います。

それでは、また!

関連記事

オススメ書籍