学習備忘ログ

よく使うコードや設定のメモ

【Golang + Echo】カンマ区切りのクエリパラメータを構造体にBindする方法

やりたいこと

下記のようなUrlで companyIdsを配列として受け取りたい。 companies/pageSize=10&page=1&companyIds=22,23,21

コードサンプル

ポイントは BindWithDelimiterの部分。ここで,区切りの数値を CompanyIdsに格納してる。

type getCompanyRequest struct {
    Name       string `query:"name"`
    CompanyIds []int  `query:"companyIds"`
    PageSize   int    `query:"pageSize"`
    Page       int    `query:"page"`
}

func GetCompanies(d *store.Store) echo.HandlerFunc {
    return func(c echo.Context) error {
        var r getCompanyRequest

        if err := echo.QueryParamsBinder(c).
            BindWithDelimiter("companyIds", &r.CompanyIds, ",").
            BindError(); err != nil {
            return c.String(http.StatusBadRequest, err.Error())
        }

        //省略
        return c.JSON(http.StatusOK, companies)
    }
}