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()