[Golang]GORMを使って、MySQLに接続してデータを保存してみる

GolangにはRDBを操作するのに便利なライブラリのGORMがあります。

これを使って、MySQLにデータを保存してみたいと思います。そのほかの操作はまた別の記事に書こうと思います。今回は保存だけ。

開発環境はMacでやってます。

MySQLのセットアップ

GORMの記事の多くはMySQLなどデータベースを立てるのを省略しているのが多く感じられたので(あくまで個人の感想です…)、MySQLのインストールから書こうと思います。ここら辺のことはもうすでにわかっているよー!って人は読み飛ばしといてください。

$ brew install mysql

Homebrewを使ってインストールします。成功したら、バージョンを確認してみましょう。

$ mysql --version
mysql  Ver 8.0.15 for osx10.14 on x86_64 (Homebrew)

それではMySQLサーバーを起動してみましょう。

$ mysql.server start
Starting MySQL
.. SUCCESS!

では実際にこのサーバーの中に入ってみましょう。パスワードを設定しているなら、-pを忘れずに。

$ mysql -uroot

今回はgormというデータベースを作成しておきましょう。

mysql> create database gorm;

実際にできているか確認してみましょう。

mysql> show databases;

ちゃんとgormというデータベースができているはずです。このデータベースを使うことにしましょう。

mysql> use gorm;
Database changed

中にデータはまだないと思います。

mysql> show tables;
Empty set (0.01 sec)

それではGORMを使って、接続しましょう。

GORMで接続

まずはGORMをインストールします。

$ go get -u github.com/jinzhu/gorm

もしまだインストールしてないならこちらも。

$ go get github.com/go-sql-driver/mysql

では、main.goに必要なライブラリとかを記述しておきましょう。

package main

import (
  "github.com/jinzhu/gorm"
  _ "github.com/jinzhu/gorm/dialects/mysql"
)

次にMySQLサーバーに接続しましょう。

func gormConnect() *gorm.DB {
  DBMS     := "mysql"
  USER     := "root"
  PASS     := ""
  PROTOCOL := ""
  DBNAME   := "gorm"
  OPTION := "charset=utf8&parseTime=True&loc=Local"

  CONNECT := USER + ":" + PASS + "@" + PROTOCOL + "/" + DBNAME + "?" + OPTION
  db,err := gorm.Open(DBMS, CONNECT)

  if err != nil {
    panic(err)
  }

  db.LogMode(true)

  return db
}

// Func main()
func main(){
  db := gormConnect()
  defer db.Close()

  // INSERT
}

それでは今回はサンプルとしてUserテーブルを作りましょう。GORMは構造体の名前の複数形をテーブル名にするようです。

type User struct {
   ID           uint `gorm:"primary_key" json:"id"`
   NAME         string `json:name`
   Description  string `json:description`
}

構造体をインスタンス化します。

var user User
var users []User

マイグレーションします。

db.AutoMigrate(&User{})

これを実行してみるとusersテーブルが作られているはずです。

mysql> show tables;
+----------------+
| Tables_in_gorm |
+----------------+
| users          |
+----------------+
1 row in set (0.01 sec)

データを保存

INSERT文はこんな感じでかけます。

// INSERT
user.ID = 0
user.NAME = "YouJ"
user.Description = "High School Student!"

db.Create(&user)

これを実行してみると、データがテーブルに追加されているはずです。

mysql> select * from users;
+----+------+----------------------+
| id | name | description          |
+----+------+----------------------+
|  1 | YouJ | High School Student! |
+----+------+----------------------+
1 row in set (0.00 sec)

まとめ

GORMはSQL文をこんなに簡単にしてくれます!今度、ほかの操作も記事にしてみたいと思います。