Gin入門① スタートアップ ~ Go言語フレームワーク ~


☑本記事の内容
  • Ginについて
  • Ginのスタートアップ
  • API実行方法

事前準備

✔事前準備の目次
  • Ginとは
  • 環境
  • 使用アプリ

Ginとは

  • Go言語のwebフレームワーク
  • パフォーマンスが優れている
Go言語のwebフレームワークの中でも1番人気。

最大40倍速の高性能なパフォーマンスを誇る。

環境

  • Go 1.17
  • go modを使用してリポジトリを管理
今回はGo 1.17を使用して開発を行っていく。

Goの環境構築に関しては下記参照。

go modを使用してリポジトリを管理する。

$ go mod init <フォルダ名>
(例) $ go mod init gin-start

go modの初期化が完了したらGinをインストールする。

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

使用アプリ

  • Talend API Tester
APIを実行するにはcurlコマンドやPostmanも使用することができるが、今回はTalend API
Tester
を使用。

Talend API TesterはGoogle Chromeの拡張機能でインストールが容易なため使用。

開発

開発

✔開発の目次
  • ディレクトリ構成
  • ソース

ディレクトリ構成

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
}			

実行

✔実行の目次
  • プログラム実行
  • API実行

プログラム実行

  • main.goを実行
$ 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実行

  • Talend API TesterでAPIを実行する

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"


コメントを残す

メールアドレスが公開されることはありません。

ABOUT US
サカイザ
機械設計→技術営業→SEと転職し、
現在フリーランスエンジニア
北海道出身東京在住
現在、Go案件を受注中
扱えるスキルGo,GCP,Java,AWS,SQL,Python,PHP,etc...
合同会社エンブリオ 代表社員