はじめに
Goの開発環境をDockerで構築していることを前提にすすめます
前日の記事でまとめているので、こちらを参考にしていただければと思います
やりかた
まずサーバーを立てます
今回はginの公式ドキュメントを参考にしました
その後、Postmanからサーバー(localhost:8080/ping)にアクセスして結果が返ってくることを確認します
DB接続の設定をします
今回はGormの公式ドキュメントを参考にしました
main.go
package main
import (
"time"
"gorm.io/driver/mysql"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
type Post struct {
gorm.Model
Weight int
Date time.Time
}
func main() {
dbConn := "DBのユーザー名:DBのパスワード@tcp("コンテナ名":3306)/DB名?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dbConn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
db.AutoMigrate(&Post{})
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
}
次にdbのコンテナに入ります
コンテナ名はdbにしたので以下コマンドを実行します
$ docker exec -it db sh
docker-compose.yml
version: "3"
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_USER: ${ROOTUSER}
MYSQL_ROOT_PASSWORD: ${ROOTPASS}
MYSQL_DATABASE: ${DATABASE}
MYSQL_USER: ${USERNAME}
MYSQL_PASSWORD: ${USERPASS}
TZ: "Asia/Tokyo"
volumes:
- ./my.cnf:/etc/mysql/conf.d/my.cnf
env_file:
- .env
container_name: db
ports:
- 3306:3306
.env
ROOTUSER=root
ROOTPASS=password
DATABASE=sampledb
USERNAME=docker
USERPASS=docker
dbのコンテナに入ったらDBに接続できることを確認します
確認が出来たらデータベースを作成します
$ mysql -u root -p
// password入力(.envのROOTPASS)
mysql > create database hoge;
テーブル作成
main.goのこの部分です
db.AutoMigrate(&Post{})
以下コマンドを実行してテーブルが作成されていることを確認できればOK
mysql > use hoge;
mysql > show tables;