TL;DR
// set api/index.go | |
package handler | |
import ( | |
"net/http" | |
"github.com/labstack/echo/v4" | |
"github.com/labstack/echo/v4/middleware" | |
) | |
func hello(c echo.Context) error { | |
return c.String(http.StatusOK, "Hello World") | |
} | |
func hello2(c echo.Context) error { | |
return c.String(http.StatusOK, "Hello World2") | |
} | |
func Handler(w http.ResponseWriter, r *http.Request) { | |
e := echo.New() | |
e.Use(middleware.Logger()) | |
e.Use(middleware.Recover()) | |
e.GET("/api/", hello) | |
e.GET("/api/2", hello2) | |
e.ServeHTTP(w, r) | |
} |
{ | |
"name": "hoge", | |
"version": 2, | |
"routes": [ | |
{ "src": "/api/.*", "dest": "api/index.go" } | |
] | |
} |
Goやサーバレスアーキテクチャの初心者なので、もうちょっといいやり方ないかなーと持っています。
やりたいこと
Vercel(Zeit now)を使っていて、Serverless functionでGoが選択できたので利用してみたいと思ったので試してみた。
やったこと
ドキュメントにあるように プロジェクトルートに api
ディレクトリを生成して date.go
などつくる(このときhttp.HandleFuncのシグネチャである公開メソッドを用意すること)と /api/date
というURLを提供できる( /api/
を指定したい場合は /api/index.go
とする)。
が、今回はルーティングはEchoに任せたい(そもそもこれでいいのか?)と思ったので、 now.json の routes
オプションを使い、 /api
配下に来たリクエストは /api/index.go
で受け取って振り分けるようにした。
わかっていないこと
go.mod で module github.com/kimihito/hoge
みたいな指定をすると、 now dev
などで開発するとGitHubにアクセスしにいってしまう。 これがGo modのお作法なのか、 利用しているプラットフォームの動作なのかわかっていない(ょゎぃ)
参考にしたリンク
mini-eggs
/
go-now-example
Dev w/ Gin, deploy w/ Now.
Because this was slightly annoying to setup. `$ ./scripts/dev.sh` to run locally. `$ ./scripts/deploy.sh` to deploy.
Top comments (0)