
【第12回】Go言語(Golang)入門~MySQL接続編~
2021.12.20
第12回~Go言語(Golang)入門~

(株)ライトコードの笹川(ささがわ)です!
今回は、データベース系の第3弾!
Firestore、ObjectBox とやってきたので、データベースとしては、王道の1つであるMySQLを使ってみようと思います。
ただ、MySQL のインストールや構築は省略させていただきます。
それでは、いってみましょう!
前回の記事はこちら
MySQLと接続してみよう
今回は、「GORM」というライブラリを使います。
【GORM(ゴルム)】
https://gorm.io/
いわゆる、ORM というやつです。
選定の理由は、利用者も多くコミュニティも活発だからです!
テーブルを用意
MySQL に下記のテーブルを用意します。
カラム名 | 型 | 制約 | 概要 |
id | INTEGER | Auto Incremen Primary Key | ― |
name | TEXT | 名前 | |
age | INTEGER | 年齢 | |
address | TEXT | 住所 | |
update_at | DATETIME | 更新日時 |
接続情報は下記とします。
DB名 | Table名 | ユーザー名 | ホスト | パスワード | Port |
go_example | users | go_example | localhost | 12345! | 3306 |
実装
それでは、接続の実装をしてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | package main import ( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/jinzhu/gorm" ) func main() { _, err := sqlConnect() if err != nil { panic(err.Error()) } else { fmt.Println("DB接続成功") } } // SQLConnect DB接続 func sqlConnect() (database *gorm.DB, err error) { DBMS := "mysql" USER := "go_example" PASS := "12345!" PROTOCOL := "tcp(localhost:3306)" DBNAME := "go_example" CONNECT := USER + ":" + PASS + "@" + PROTOCOL + "/" + DBNAME + "?charset=utf8&parseTime=true&loc=Asia%2FTokyo" return gorm.Open(DBMS, CONNECT) } |
接続情報の設定にミスがなれけば、ログに「DB接続成功」と出るはずです。
構造体を用意してみよう
接続が問題なく出来たので、データを色々操作するために、テーブル構造に沿った形で構造体を実装します。
1 2 3 4 5 6 7 8 | // Users ユーザー情報のテーブル情報 type Users struct { ID int Name string `json:"name"` Age string `json:"age"` Address string `json:"address"` UpdateAt string `json:"updateAt" sql:"not null;type:date"` } |
DATE型であるカラムの update_atで すが、string型として構造体を作成してます。
理由としては、REST API として JSON で吐き出す際や、値を受け取る際のパースが string のほうが簡単だったからです!
ここは笹川の経験不足で上手く扱えなかったので、今記事では string のまま進めます。
データを追加してみよう
GORM では、とても簡単にデータを追加できます。
1 2 3 4 5 6 | db.Create(&Users{ Name: "テスト太郎", Age: 18, Address: "東京都千代田区", UpdateAt: "2019-11-7 11:00:00", }) |
なんと、たったこれだけで、データが追加できます。
update_atカラムへのデータの生成は、別メソッドで作ります。
1 2 3 4 5 | func getDate() string { const layout = "2006-01-02 15:04:05" now := time.Now() return now.Format(layout) } |
現在日時を「 yyyy-MM-dd HH:mm:ss 」の文字列形式で生成します。
データ接続から追加までを纏めると、こんな感じになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | package main import ( "fmt" "time" _ "github.com/go-sql-driver/mysql" "github.com/jinzhu/gorm" ) func main() { // db接続 db, err := sqlConnect() if err != nil { panic(err.Error()) } defer db.Close() error := db.Create(&Users{ Name: "テスト太郎", Age: 18, Address: "東京都千代田区", UpdateAt: getDate(), }).Error if error != nil { fmt.Println(error) } else { fmt.Println("データ追加成功") } } func getDate() string { const layout = "2006-01-02 15:04:05" now := time.Now() return now.Format(layout) } // SQLConnect DB接続 func sqlConnect() (database *gorm.DB, err error) { DBMS := "mysql" USER := "go_example" PASS := "12345!" PROTOCOL := "tcp(localhost:3306)" DBNAME := "go_example" CONNECT := USER + ":" + PASS + "@" + PROTOCOL + "/" + DBNAME + "?charset=utf8&parseTime=true&loc=Asia%2FTokyo" return gorm.Open(DBMS, CONNECT) } // Users ユーザー情報のテーブル情報 type Users struct { ID int Name string `json:"name"` Age int `json:"age"` Address string `json:"address"` UpdateAt string `json:"updateAt" sql:"not null;type:date"` } |
「テスト太郎」が追加されたら成功です!
データの取得をしてみましょう
では、追加したデータを表示させたいと思います。
特に、検索条件がない場合は、とても簡単です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package main import ( "fmt" "time" _ "github.com/go-sql-driver/mysql" "github.com/jinzhu/gorm" ) func main() { // db接続 db, err := sqlConnect() if err != nil { panic(err.Error()) } defer db.Close() addUserData(db) result := []*Users{} error := db.Find(&result).Error if error != nil || len(result) == 0 { return } for _, user := range result { fmt.Println(user.Name) } } |
もちろん、「検索」をするのも簡単です。
1 | db.Where("name LIKE ?", "%テスト%").Find(&result) |
このように、LIKE検索なども、サクッと実装できてします。
クエリについては、以下の公式ドキュメントを参考にすれば、大体のことは出来るはずです!
【公式ドキュメント】
http://gorm.io/ja_JP/docs/query.html
データの取得までで結構なボリュームになってしまったので、「データの更新」と「削除」は次回にやりたいと思います!
第13回へつづく!
GORMを使うと、Golang(Go言語)でMySQLを扱うのが格段に楽になります。
Golang(Go言語)と RDBMS の親和性は、あまり高くないと聞いたことがありますが、それでも使いたい人は多いハズ!
GORM を使って、みんなで楽しましょう!
次回の記事はこちら
オススメのGo入門本
こちらの記事もオススメ!
第1回の記事はこちら
書いた人はこんな人

- 新潟生まれ新潟育ち本業はモバイルアプリエンジニア。
日々、猫(犬)エンジニアとして活躍中!
IT技術9月 20, 2023開発効率を少しだけ上げるGithubActionsの便利な使い方
IT技術4月 7, 2023【ISUCON部】ライトコードISUCON部 始動!
IT技術4月 18, 2022【Android】Webでよくみる入力Boxを手作り
IT技術1月 19, 2022【Android】SeekbarでスイッチなUIを作る