Go言語コワクナイ 第3話
〜echoでHTMLファイルを表示してWebサイトを作ってみよう〜
前回のあらすじ
main.goの
e.GET("/", func(ctx echo.Context) error { return ctx.JSON(200, "Hello, World!") })
を
e.Static("/", assets) e.File("/", "public.html")
に書き換えることでhtmlを表示させることができました。
今回はControllerの作成を行っていきます。
じつは、第1回で記述した
e.GET("/", func(ctx echo.Context) error { return ctx.JSON(200, "Hello, World!") })
もControllerの書き方の一つとなっています。
しかし、main.goにひたすらControllerを増やしていくとmain.goの中身が大変なことになってしまいますね。
e.GET("/hello", func(ctx echo.Context) error { return ctx.JSON(200, "Hello, World!") }) e.GET("/dog", func(ctx echo.Context) error { return ctx.JSON(200, "わんわん!") }) e.GET("/cat", func(ctx echo.Context) error { return ctx.JSON(200, "にゃー!") }) ...
そこで、Controllerのファイルを分割して作成していきましょう。
hello_controller.goを作成しましょう。
$ mkdir hello $ mkdir hello/controller $ touch hello/controller/hello_controller.go
Controllerの中身を作成していきます。
package controller // HelloController hello controller type HelloController struct{} func NewHelloController(e *echo.Echo) { handler := &HelloController{} e.GET("/", handler.Hello) } // Hello hello world func (c *HelloController) Hello(ctx echo.Context) error { return ctx.JSON(200, "Hello, World!") }
まずHelloControllerの構造体を宣言します。 今回は構造体の要素は空のままで大丈夫です。
type HelloController struct{}
Usecaseなどを使用する場合はControllerの構造体の要素を宣言します。
type HelloController struct{ HelloUsecase: usecase.HelloUsecase }
次にNewHelloControllerでcontrollerをmountします。
func NewHelloController(e *echo.Echo) { handler := &HelloController{} e.GET("/", handler.Hello) }
handlerには先程宣言したHelloControllerを指定しましょう。
e.GET("/", handler.Hello)
この部分はルーティングになります。 ルーティングはグループ化することができ、
api := e.Group("/api/v1") api.Get("/", handler.Hello)
のように記載すると/api/v1
をprefixに付けることができます。
また、ルーティングにmiddlewareをかけたい場合はe.Group
の第2引数にmiddlewareを指定することによってそのグループにのみmiddlewareをかけることも可能です
auth := e.Group("/api/v2", middleware.Authorization) auth.POST("/accounts", handler.Create)
e.メソッド
の第1引数にはエンドポイント、第2引数にはContollerのメソッドを記載します。
また、この段階でもmiddlewareをかけることも可能です
エンドポイントでpathパラメータを指定することも可能です
e.GET("/hello/:name", handelr.Hello)
では、Controllerのメソッドの実装をしていきましょう。
// Hello hello world func (c *HelloController) Hello(ctx echo.Context) error { return ctx.JSON(200, "Hello, World!") }
レシーバにはHelloControllerを設定し
引数はecho.Context
返り値はerror型を指定します。
return ctx.JSON
の部分は返すレスポンスによって変わってきます。
ここの部分に関しては公式ドキュメントを参照してください。
ここまで書ければ後は、main.goで呼び出せば終了です。
e := echo.New() controller.NewHelloController(e)
それでは環境を起動してみましょう。
$ go build $ ./echo-server
localhost:1323にアクセスすると以下のように表示されます。
次回
〜gormを使ってpostgressに接続してみよう〜