gorm + echo + mysql で json を返すサーバー作成

go

Go言語の ORM である gorm を使って mysql にアクセスし、
それを httpサーバーフレームワークである echo で、jsonレスポンスを生成します。

GORM
https://gorm.io/ja_JP

Echo, High performance, minimalist Go web framework
https://echo.labstack.com

macOS catalina で確認済み

まずはベースとなるフォルダを作成

% mkdir test_go
% cd test_go

go.mod ファイルを生成

% go mod init go_test

mysql で users というテーブルを作成し、
id, email, name というフィールドを作成してください
id はInt型、emailとnameはVARCHAR型です。

id=1 のカラムを作成し、適当な email と name を入れてください。

以下のファイルを作成してください。

go_test/main.go

package main

import (
	"github.com/labstack/echo/v4"
	"github.com/labstack/echo/v4/middleware"
	"go_test/user"
	"go_test/users"
)

func main() {
	e := echo.New()

	e.Use(middleware.Logger())
	e.Use(middleware.Recover())

	e.GET("/users/:id", user.SelectUser)
	e.GET("/users", users.SelectUsers)

	// Start server
	e.Logger.Fatal(e.Start(":3000"))
}

username, password, dbname の部分は
各自の mysql のパラメータに置き換えてください。

go_test/users/users.go

package users

import (
	"github.com/labstack/echo/v4"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"net/http"
)

type (
	User struct {
		Id   int    `json:"id"`
		Name string `json:"name"`
	}

	Response struct {
		Users []User `json:"users"`
	}
)

var (
	dsn = "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
)

func SelectUsers(c echo.Context) error {
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

	if err != nil {
		panic("failed to connect database")
	}

	var users []User

	db.Find(&users)

	response := new(Response)
	response.Users = users

	return c.JSON(http.StatusOK, response)
}

go_test/user/user.go

package user

import (
	"github.com/labstack/echo/v4"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"net/http"
)

type (
	User struct {
		Id   int    `json:"id"`
		Name string `json:"name"`
	}

	Response struct {
		User User `json:"user"`
	}
)

var (
	dsn = "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
)

func SelectUser(c echo.Context) error {
	id := c.Param("id")

	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

	if err != nil {
		panic("failed to connect database")
	}

	var user User

	db.First(&user, id)

	response := new(Response)
	response.User = user

	return c.JSON(http.StatusOK, response)
}

実行

% go run main.go

ブラウザで
http://localhost:3000/users
または
http://localhost:3000/user/1

とアクセスして json が表示されれば成功です!

Go言語でオススメの本

Goならわかるシステムプログラミング

改訂2版 みんなのGo言語

コメント

タイトルとURLをコピーしました