martiniの40倍速いと謳っているginというGoのWAFがあります。
ライブリロード機能は内包していないため、開発中go runし直すのが面倒なので、martini作者の作ったginというツールを使ってginをライブリロードします。
ginのインストール
$ go get github.com/gin-gonic/gin
$ go get github.com/codegangsta/gin
ginの仕様
ginを叩いたディレクトリにあるgoのコードが変更されると自動でリビルドし、そこにプロキシしてくれます。
ライブリロード対象は環境変数PORTでポートを指定できなければいけません。
ginアプリを書く
app.go
package main
import (
"os"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.String(200, "hello")
})
port := os.Getenv("PORT")
if len(port) == 0 {
port = "3000"
}
r.Run(":" + port)
}
ginでginアプリを動かす
$ go run app.go
[GIN] 2014/08/15 - 22:45:34 | 200 | 12.349us | [::1]:58191 GET /
[GIN] 2014/08/15 - 22:45:35 | 200 | 8.864us | [::1]:58191 GET /
[GIN] 2014/08/15 - 22:45:35 | 200 | 9.756us | [::1]:58191 GET /
[GIN] 2014/08/15 - 22:45:36 | 200 | 8.889us | [::1]:58191 GET /
^Cexit status 2
$ gin
[gin] listening on port 3000
[GIN] 2014/08/15 - 22:45:50 | 200 | 11.558us | ::1 GET /
[GIN] 2014/08/15 - 22:45:51 | 200 | 9.044us | ::1 GET /
[GIN] 2014/08/15 - 22:45:51 | 200 | 8.729us | ::1 GET /
[GIN] 2014/08/15 - 22:45:52 | 200 | 8.671us | ::1 GET /
ほぼ本来の出力で開発でき、リビルドが走っても出力が汚れません。
これで、ginによってginアプリをライブリロードしつつ開発することができます。
まとめ
ginとgin名前がかぶっていて紛らわしいですね