タグ

2013年12月11日のブックマーク (2件)

  • Goでガード的なものを書く際のイディオム(はこれでいいの?) : D-7 <altijd in beweging>

    色々Goで書いてみてやはりガードオブジェクトが欲しい、と思うことがよくある。一時的に何かの値を有効にしたり、かならず解放・リセット処理を行いたい場合のイディオムだ。これでいいのかわからないのだけど、とりあえず現時点で自分がやっていることをメモしておく。 Goにはdeferという仕組みがあって、関数の最後に必ずこれを実行してくれる。だがこれをオブジェクト構造体 につける方法はない。もちろん、構造体に対する関数呼び出しをdeferすることで同じ事ができるんだけど、そうするとどの関数を呼び出すのかをいちいち覚えていないといけない。一応runtime.SetFinalizer()というものはあるんだけど、これはいつ処理が走るのかわからないし、複数のオブジェクトやリソースが絡んでいる時にどの順番で処理が走るかもわからない。 ということはやはりdefer() を駆使するべきだろう。ということで自分は以

    Goでガード的なものを書く際のイディオム(はこれでいいの?) : D-7 <altijd in beweging>
    hiroyukim
    hiroyukim 2013/12/11
  • Goでstart_server (Server::Starter)とうまいことやる : D-7 <altijd in beweging>

    色々調べてたらgo でHTTPサーバーをgraceful restartする方法の記事にあたって、そのなかでシグナルを受け取るとリクエストを受け取ったらそれまでに受け付けたリクエストを処理してから停止するmannersというツールを見つけた。さらにゼロダウンタイムでサーバーを再起動するgoagainというツールも見つけたんだけど、これはサーバー内のコードをそれなりに変更しないといけないっぽくてうんざりしてしまった。 「っていうか普通にServer::Starterをかませるようにできればよくね?」と思ったので、go-server-starter-listenerを書いてみた!使い方はREADMEにあるとおり。このようなコードを書いておいてからstart_server --port XXX -- ./your-go-program って感じで動作させればServer::Starterが保持し

    Goでstart_server (Server::Starter)とうまいことやる : D-7 <altijd in beweging>