前の記事でdocker-composeを使ってGinの環境構築を行いました。今回の記事ではその続きとしてControllerの整備をしていきたいと思います。
筆者の環境
- macOS BigSur 11.4
- M1 Mac
- docker-compose version 1.29.2, build 5becea4c
- Docker version 20.10.7, build f0df350
その他バージョン
- Go 1.19(2022-08-02リリース)
- Gin 1.8.1
プロジェクトの現在の状態
./
├── app
│ ├── Dockerfile
│ └── src
│ ├── go.mod
│ ├── go.sum
│ └── main.go
└── docker-compose.yaml
やることリスト
- Controllerを作成する
- Routerを作成する
- main.goを修正する
1. Controllerを作成する
まずはControllerを作成していきます。
src
配下に Controller
ディレクトリを作成し、その中にControllerファイルを作成していきます。
$ mkdir -p app/src/controller
$ cd app/src/controller
$ touch index_controller.go
index_controller.go
が新規で作成されましたので、中身を以下のように書いていきます。
package controller
import (
"github.com/gin-gonic/gin"
)
func Index(c *gin.Context) {
c.JSON(200, gin.H{
"message": "this is index!!!!",
})
}
単純に { "message": "this is index!!!!"}
と返すだけのControllerです。
これでControllerの作成が完了です。今はこんな感じになっているはずですね。
./
├── app
│ ├── Dockerfile
│ └── src
│ ├── controller
│ │ └── index_controller.go
│ ├── go.mod
│ ├── go.sum
│ └── main.go
└── docker-compose.yaml
2. Routerを作成する
エンドポイントごとに適切なControllerに処理を流すためのRouterを作成していきます。
先ほど作成した `controller`ディレクトリ配下に作成します。
$ touch app/src/controller/router.go
これでrouter用のファイルが作成されましたので、以下のように中身を書いていきます。
package controller
import (
"github.com/gin-gonic/gin"
)
func GetRouter() *gin.Engine {
r := gin.Default()
r.GET("/", Index)
return r
}
これで完成です。プロジェクトは今こんな感じになっているでしょうか。
./
├── app
│ ├── Dockerfile
│ └── src
│ ├── controller
│ │ ├── index_controller.go
│ │ └── router.go
│ ├── go.mod
│ ├── go.sum
│ └── main.go
└── docker-compose.yaml
3. main.goを修正する
main.go
で router
を呼び出すように修正します。↓のように書き換えてください。
package main
import "nothing-behind.com/sample_gin/controller"
func main() {
router := controller.GetRouter()
router.Run(":8080")
}
これで準備は完了です!
さてコンテナを起動してアクセスしてみましょう!
$ curl http://localhost:3000/
{"message":"this is index!!!!"}
となれば成功です!