Sinatraライクなgin-gonicで手軽にGolangを試す。

こんにちわ。5号です。Sinatraライクと書いておきながらあんまりSinatra触ったことが無いので全然違ったらすみません。 Golangを試す際にWebAppサーバ作ってみようとする時に軽量なフレームワークで試せるgin-gonicは良いと思います。

gin-gonic/gin · GitHub

こちらのqiitaで導入方法は詳細に説明されているのと、

Go - Gin Web Frameworkを試してみたよ - Qiita

READMEさえ見たら簡単なサーバはすぐ作れるのですが、せっかくなので今回はGETした時のURIパラメータをそのまま返すWebAppを作ってみます。

main.go

package main

import "github.com/gin-gonic/gin"
func main() {
    router := gin.Default()
    router.GET("/:string", func(c *gin.Context) {
        string := c.Params.ByName("string")
        c.String(200, string)
    })
    router.Run(":8080")
}

こんな感じでmain.goを書いた後にgo get github.com/gin-gonic/ginを実行した後にgo run main.goを実行するとサーバが8080ポートで起動するので

$ curl 127.0.0.1:8080/test
test

という結果が得られるはずです。

じゃあ、POSTリクエストの中身を取得したい場合は、

main.goを以下の様に書き換えます。

package main

import "github.com/gin-gonic/gin"

//POSTされた値を格納するための構造体を定義
type ( TestFormat struct {
    Value string `json:"key"`  //jsonの時にkeyに使われる名称を指定
})

func main() {
    router := gin.Default()

    router.POST("/", func(c *gin.Context) {
        var tmp TestFormat //POSTされた値を受け取るための構造体
        c.Bind(&tmp) //構造体に値をbindする

        c.String(200, tmp.Value) //tmp.Valueでbindされた値を呼び出している
    })

    router.Run(":8080")
}

で、curlで以下の様にPOSTすると

$ curl -X POST -H 'Content-Type: application/json' -d '{"key":"oretachino"}' http://127.0.0.1:8080/
oretachino

とjsonで値に設定した値が返ってくるはずです。もうちょっと込み入った事するなら、取得した値を元に別の処理に引き回して・・・とかをちょろちょろ拡張出来ますね。

という訳で、READMEに書いている事のほんの一部を書いただけですが、気楽にGolangでWebサーバを作れるのでちょっとしたテストとかでまずは試してみるのは良いんじゃないでしょうか。