おっさんのダベリ

IT系の技術的な話題が多いです

goslashを自前のサーバで動かしてみた

net/httpに対応させる

これまではgoslashをGAEで動かしてみましたが、goslash自体はGAEに依存しているわけではありません。

net/httpのResponseWriterやRequest、そしてClientがあれば他の環境でも動かすことが出来ます。 ということで、通常のhttpサーバとして動くようにするにはちょっとした修正で終わりました。

今回対応させたコードはこちらにあります。

GitHub - yhanada/goslash-sample-server

コマンドラインの処理について

AppEngineでは自分がローカルで起動しているかどうかを判定するためのメソッドがありましたが、自前実装ではコマンドラインオプションとして起動時に渡すようにしたいと思いました。

今回、いろいろと調べてみて「へ〜」となったのが、コマンドライン処理でUsageを表示させる方法です。

コマンドラインオプションの処理をしているところを抜粋すると以下のようになります。

ここで、flag.Usageに対してfuncを渡しているところがあるのですが、これだけで-hを指定した場合にこのfuncが実行されるようになります。

そして、flag.PrintDefaults()で、flagに定義したオプションを表示させることも出来ます。これを呼び出すようにしておけばオプションの名前を変更したとか、削除したとかをUsageに反映忘れとかがなくなって便利ですね。

var (
    port    uint
    timeout Time.Duration
    isDev   bool
)

func main() {
    flag.UintVar(&port, "port", 8080, "server port")
    flag.BoolVar(&isDev, "dev", false, "is development mode")
    flag.DurationVar(&timeout, "timeout", 10*Time.Second, "http client timeout")
    flag.Usage = func() {
        fmt.Fprintf(os.Stderr, "Usage of %s:\n  %s [OPTIONS]\n", os.Args[0], os.Args[0])
        flag.PrintDefaults()
    }
    flag.Parse()