miyazi888の覚え書き日記

学習したことを書き留めてます。

echoのリクエストパラメータの受け取り方

リクエストパラメータの受け取り方を公式サイトを見ながら検証してみました。
と言ってもほぼ公式サイトに載ってるサンプルではあるのですが・・・
リクエストパラメータを取得する方法もシンプルなので下のプログラムを見たら、すぐにわかると思います。

リクエストパスに組み込まれているパラメータを取得する時にはParamメソッドを使う。
リクエストパスの後ろのクエリパラメータで指定されているものを取得する時にはQueryParamメソッドを使う。
POSTなどでフォームで送信しているパラメータを取得する時にはFormValueメソッドを使う。
要はパラメータの送信手段ごとに対応するメソッドが用意されている、ということです。

RailsだとすべてParamsに格納されているので、Railsに慣れた人だとちょっと戸惑うかもしれない仕様かもしれないです。

パラメータの受け取り

URLごとにリクエストパラメータを送信する手段が違うので、これで動作確認ができると思います。

プログラム

package main

import (
    "net/http"

    "github.com/labstack/echo"
)

func main() {
    e := echo.New()
    e.GET("/item/:id", getItem) // path parameter
    e.GET("/items", getItems)   // query parameter
    e.POST("/item", createItem) // form parameter
    e.Logger.Fatal(e.Start(":1111"))
}

func getItem(c echo.Context) error {
    id := c.Param("id")
    return c.String(http.StatusOK, "id = "+id)
}

func getItems(c echo.Context) error {
    name := c.QueryParam("name")
    return c.String(http.StatusOK, "name = "+name)
}

func createItem(c echo.Context) error {
    name := c.FormValue("name")
    return c.String(http.StatusOK, "create name = "+name)
}

実行

go run main.go<br>

で起動した後、別のターミナルからコマンドを叩いてみて下さい。
それぞれ返却される文字列が違うことで動作を確認できるかと思います。

curl http://localhost:1111/item/134 > id = 134
curl http://localhost:1111/items\?name\=test_name > name = test_name
curl -F "name=test-name" -X POST http://localhost:1111/item  > create name = test-name