💯

gin-swagger導入手順

2023/09/14に公開

goを初期化

sh
go mod init app 

適当にパッケージを用意

sh
mkdir -p app/{controller,database,helper,middleware,model,service}
touch README.md main.go

ginをインストール

sh
go get -u github.com/gin-gonic/gin

ここまでで以下のような状態

sh
~/IdeaProjects/gin-swagger $ tree    
.
├── README.md
├── app
│   ├── controller
│   ├── database
│   ├── helper
│   ├── middleware
│   ├── model
│   └── service
├── go.mod
├── go.sum
└── main.go

main.goで以下のように記載する。

main.go
package main

import "github.com/gin-gonic/gin"

import "net/http"

func main() {
    engine:= gin.Default()
    engine.GET("/", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "hello world",
        })
    })
    engine.Run(":8080")
}

Goを起動

go run main.go

以下のコマンドをターミナル上で実行してレスポンスを確認します。

curl http://localhost:8080/
{"message":"hello world"}% 

hello worldが返ってきたらOK

#ここから導入

swagインストール

go install github.com/swaggo/swag/cmd/swag@latest

初期化

 swag init
2023/09/14 23:17:33 Generate swagger docs....
2023/09/14 23:17:33 Generate general API Info, search dir:./
2023/09/14 23:17:33 create docs.go at docs/docs.go
2023/09/14 23:17:33 create swagger.json at docs/swagger.json
2023/09/14 23:17:33 create swagger.yaml at docs/swagger.yaml

これで関連ファイルが作成される

~/IdeaProjects/gin-swagger $ tree
.
├── README.md
├── app
│   ├── controller
│   ├── database
│   ├── helper
│   ├── middleware
│   ├── model
│   └── service
├── docs
│   ├── docs.go
│   ├── swagger.json
│   └── swagger.yaml
├── go.mod
├── go.sum
└── main.go

swaggerをインストール

go get -u github.com/swaggo/gin-swagger
go get -u github.com/swaggo/files

コントローラーを作成し、コメントを書く

controller/hello.go
package controller

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

// @BasePath /api/v1

// PingExample godoc
// @Summary liveness probe
// @Schemes
// @Description do ping
// @Tags Hello World
// @Accept json
// @Produce json
// @Success 200 {string} Helloworld
// @Router /hello [get]
func HelloWorld(g *gin.Context) {
	g.JSON(http.StatusOK, "helloworld")
}

main.goを以下のようにする

main.go
package main

import (
	"app/app/controller"
	"app/docs"
	"github.com/gin-gonic/gin"
	swaggerfiles "github.com/swaggo/files"
	ginSwagger "github.com/swaggo/gin-swagger"
)

func main() {
	route := SetupRoutes()
	docs.SwaggerInfo.BasePath = "/api/v1"
	v1 := route.Group("/api/v1")
	{
		eg := v1.Group("/")
		{
			eg.GET("/hello", controller.HelloWorld)
		}
	}
	route.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))
	route.Run(":8080")
}

func SetupRoutes() *gin.Engine {
	route := gin.Default()
	route.GET("/", controller.HelloWorld)
	return route
}

swag initを実行する

swag init
2023/09/14 23:29:09 Generate swagger docs....
2023/09/14 23:29:09 Generate general API Info, search dir:./
2023/09/14 23:29:09 create docs.go at docs/docs.go
2023/09/14 23:29:09 create swagger.json at docs/swagger.json
2023/09/14 23:29:09 create swagger.yaml at docs/swagger.yaml

Goを立ち上げる

sh
go run main.go    

http://localhost:8080/api/v1/hello にアクセスして動作していることを確認

http://localhost:8080/swagger/index.html にアクセスしてswaggerが動作していることを確認

Discussion