Breaking News

Default Placeholder Default Placeholder

前の記事で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

やることリスト

  1. Controllerを作成する
  2. Routerを作成する
  3. 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.gorouterを呼び出すように修正します。↓のように書き換えてください。

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!!!!"}

となれば成功です!