[box class="blue_box" title="☑本記事の内容"]
- Ginについて
- Ginのスタートアップ
- API実行方法
[/box]
[box class="glay_box" title="Contents"]
[/box]
事前準備
[box class="yellow_box" title="✔事前準備の目次"]
- Ginとは
- 環境
- 使用アプリ
[/box]
Ginとは
[box class="green_box"]
- Go言語のwebフレームワーク
- パフォーマンスが優れている
[/box]
Go言語のwebフレームワークの中でも1番人気。
最大40倍速の高性能なパフォーマンスを誇る。
環境
[box class="green_box"]
- Go 1.17
- go modを使用してリポジトリを管理
[/box]
今回はGo 1.17を使用して開発を行っていく。
Goの環境構築に関しては下記参照。
[kanren postid="1522" ]
go modを使用してリポジトリを管理する。
$ go mod init <フォルダ名>
(例) $ go mod init gin-start
go modの初期化が完了したらGinをインストールする。
$ go get -u github.com/gin-gonic/gin
使用アプリ
[box class="green_box"]
- Talend API Tester
[/box]
APIを実行するにはcurlコマンドやPostmanも使用することができるが、今回はTalend API
Testerを使用。
Talend API TesterはGoogle Chromeの拡張機能でインストールが容易なため使用。
開発
[box class="yellow_box" title="✔開発の目次"]
- ディレクトリ構成
- ソース
[/box]
ディレクトリ構成
gin-started
├─go.mod
├─go.sum
├─main.go
├─controller
│ └─user_controller.go
├─model
│ └─user.go
└─service
└─user_service.go
ソース
- main.go
package main
import (
"gin-start/controller"
"gin-start/service"
"github.com/gin-gonic/gin"
)
var (
userService service.UserService = service.New()
userController controller.UserController = controller.New(userService)
)
func main() {
router := gin.Default()
router.GET("/user", func(ctx *gin.Context) {
ctx.JSON(200, userController.FindAll())
})
router.POST("/user", func(ctx *gin.Context) {
ctx.JSON(200, userController.Save(ctx))
})
router.Run("localhost:8080")
}
- model.go
package model
type Users struct {
Id int `json:"id"`
Name string `json:"name"`
}
- user_service.go
package service
import "gin-start/model"
type UserService interface {
Save(model.Users) model.Users
FindAll() []model.Users
}
type userService struct {
users []model.Users
}
func New() UserService {
return &userService{}
}
func (service *userService) Save(user model.Users) model.Users {
service.users = append(service.users, user)
return user
}
func (service *userService) FindAll() []model.Users {
return service.users
}
- user_controller.go
package controller
import (
"gin-start/model"
"gin-start/service"
"github.com/gin-gonic/gin"
)
type UserController interface {
FindAll() []model.Users
Save(ctx *gin.Context) model.Users
}
type controller struct {
service service.UserService
}
func New(service service.UserService) UserController {
return &controller{
service: service,
}
}
func (c *controller) FindAll() []model.Users {
return c.service.FindAll()
}
func (c *controller) Save(ctx *gin.Context) model.Users {
var user model.Users
ctx.BindJSON(&user)
c.service.Save(user)
return user
}
実行
[box class="yellow_box" title="✔実行の目次"]
- プログラム実行
- API実行
[/box]
プログラム実行
[box class="green_box"]
- main.goを実行
[/box]
$ go run main.go
(結果)
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET /user --> main.main.func1 (3 handlers)
[GIN-debug] POST /user --> main.main.func2 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on localhost:8080
API実行
[box class="green_box"]
- Talend API TesterでAPIを実行する
[/box]
POST
GET
Log
[GIN] 2022/01/30 - 18:35:16 | 200 | 1.7439ms | 127.0.0.1 | POST "/user"
[GIN] 2022/01/30 - 18:36:14 | 200 | 0s | 127.0.0.1 | GET "/user"