golangでGeoIPできるの作ってみた2

2013-10-29  /  Go

ip2country

IPから国名がわかるコマンドラインツール。

前回
作ったやつを修正して、標準入力も受け取るようにした。

使い方

前回とほぼ同じだけど改めて書くと。

GeoLite Free Downloadable Databases « Maxmind Developer Site

↑こちらのページから、GeoLite Country のバイナリデータを持ってくる。適当に解凍しておく。解凍済みのファイルは、GeoIP.datのはず。

1.オプションでIPを渡す

ip2country –db GeoIP.datのパス IPアドレス …

IPアドレスは複数渡せるようにした。

2.標準入力でIPを渡す

ip2country –db GeoIP.datのパス < iplist.txt

こんな感じでリダイレクトとかパイプでIPのリストが渡せる。1行1IP。

実際に使う場合には、awkとかと併用すると思う。こんな感じかな。

cat access.log | grep wp-comment.php | awk ‘{print $1}’ | sort | uniq | ip2country

ファイルのパス指定

以下の順番でDBファイルのパスを探索する。

  1. 環境変数
  1. オプション
  1. カレントディレクトリ

作った感想

golangの使い道は色々とあると思うんだけど、自分は今回みたいなコマンドラインツールとかがメインかな~と思っているので、今回のテーマはちょうど良かった。かかった時間は、10時間くらいかな。

エラー処理を後回しにせずに、都度処理するというスタイルにあまり慣れていないので、ちょっと記述が冗長になりそうな気もする。
けど、後回しにするとざっくりとした例外処理になっちゃうことが多いので、細かく処理する方が良いのかなと思ったりもする。

後は、コードの作法的なのがまだ分かってないので、既存のプロダクトのコード読むとかした方が良いかな。

ポインタに慣れてないので、やっぱその辺がちょっと抵抗感があるかな〜というのが正直なところ。

Published: 2013-10-29  /  Tags: Go  /  Share: X