[Golang/Go言語]文字数カウントツールを作って遊び心を爆発させよう!

golang

こんにちは。KOUKIです。

とあるWeb系企業で、Goエンジニアをやっています。

今日は、Go言語で文字数カウントツールを作りましょう。

シチュエーション

「https://www.rfc-editor.org/rfc/rfc1050.txt」のようにインターネットで公開されているテキストをGo言語で読み込んで、a,b,cなどの文字がその文章の中でどのくらい使われているのかチェックするツールを作成します。

実装1: 逐次処理

早速、実装しましょう。

countLetters関数は、Web上に公開されているTextを読み込んで、frequency [26]int32変数に格納する処理を実装しています。この26文字は「abcdefghijklmnopqrstuvwxyz」を指しています。int32はカウント数ですね。

読み込んだ文字がこの26文字内に含まれるものかチェックし、含まれた場合は該当の文字のカウント数をインクリメントします。

main関数では、1000~1200番のWeb Textをリクエストできるようにfor文で繰り返し処理を実装しています。

プログラムを実行します。

いい感じですね。イメージは掴めたでしょうか?

1分くらい処理に時間がかかってしまうのが難点ですね。

実装2: Goroutine + Mutex

GoroutineとMutexを使って、平行処理を取り入れてみましょう。

変更した箇所は、コメントにしてあります。

Mutexはメモリ書き込み読み込みの競合を防ぐ便利機能なので覚えておきましょう。今回は、カウント数のインクリメントで競合が起きそうなので、そこをロックしています。

プログラムを実行してみましょう。

今度は、約2秒です。めちゃくちゃ早くなりましたね。

実装3: atomic

次は、atomicパッケージのAddInt32を使ってみましょう。

atomicを導入するとMutexが不要になるので、コメントアウトしておきました。

プログラムを実行してみます。

約3秒ですか。。若干、遅くなりましたね。

おわりに

いかがだったでしょうか。

文字数のカウント自体はあまり実務では使わないと思います。

これが、「単語」単位のカウントであれば、使いそうな気がしますね。

一文章の中にどれだけ重複したキーワードが使われているか、それを分析するみたいな。

色々改良して楽しんでください^^

それでは、また!

Go記事まとめ

Go記事をまとめます。

コメントを残す