【第12回】Go言語(Golang)入門~MySQL接続編~
IT技術
第12回~Go言語(Golang)入門~
(株)ライトコードの笹川(ささがわ)です!
今回は、データベース系の第3弾!
Firestore、ObjectBox とやってきたので、データベースとしては、王道の1つであるMySQLを使ってみようと思います。
ただ、MySQL のインストールや構築は省略させていただきます。
それでは、いってみましょう!
前回の記事はこちら
2019.11.20【第11回】Go言語(Golang)入門~FCM送信編~第11回~Go言語(Golang)入門~笹川先生(株)ライトコードの笹川(ささがわ)です!今回は、Firebase C...
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 |
実装
それでは、接続の実装をしてみましょう。
1package main
2
3import (
4 "fmt"
5
6 _ "github.com/go-sql-driver/mysql"
7 "github.com/jinzhu/gorm"
8)
9
10func main() {
11 _, err := sqlConnect()
12 if err != nil {
13 panic(err.Error())
14 } else {
15 fmt.Println("DB接続成功")
16 }
17}
18
19// SQLConnect DB接続
20func sqlConnect() (database *gorm.DB, err error) {
21 DBMS := "mysql"
22 USER := "go_example"
23 PASS := "12345!"
24 PROTOCOL := "tcp(localhost:3306)"
25 DBNAME := "go_example"
26
27 CONNECT := USER + ":" + PASS + "@" + PROTOCOL + "/" + DBNAME + "?charset=utf8&parseTime=true&loc=Asia%2FTokyo"
28 return gorm.Open(DBMS, CONNECT)
29}
接続情報の設定にミスがなれけば、ログに「DB接続成功」と出るはずです。
構造体を用意してみよう
接続が問題なく出来たので、データを色々操作するために、テーブル構造に沿った形で構造体を実装します。
1// Users ユーザー情報のテーブル情報
2type Users struct {
3 ID int
4 Name string `json:"name"`
5 Age string `json:"age"`
6 Address string `json:"address"`
7 UpdateAt string `json:"updateAt" sql:"not null;type:date"`
8}
DATE型であるカラムの update_atで すが、string型として構造体を作成してます。
理由としては、REST API として JSON で吐き出す際や、値を受け取る際のパースが string のほうが簡単だったからです!
ここは笹川の経験不足で上手く扱えなかったので、今記事では string のまま進めます。
データを追加してみよう
GORM では、とても簡単にデータを追加できます。
1db.Create(&Users{
2 Name: "テスト太郎",
3 Age: 18,
4 Address: "東京都千代田区",
5 UpdateAt: "2019-11-7 11:00:00",
6 })
なんと、たったこれだけで、データが追加できます。
update_atカラムへのデータの生成は、別メソッドで作ります。
1func getDate() string {
2 const layout = "2006-01-02 15:04:05"
3 now := time.Now()
4 return now.Format(layout)
5}
現在日時を「 yyyy-MM-dd HH:mm:ss 」の文字列形式で生成します。
データ接続から追加までを纏めると、こんな感じになります。
1package main
2
3import (
4 "fmt"
5 "time"
6
7 _ "github.com/go-sql-driver/mysql"
8 "github.com/jinzhu/gorm"
9)
10
11func main() {
12 // db接続
13 db, err := sqlConnect()
14 if err != nil {
15 panic(err.Error())
16 }
17 defer db.Close()
18
19 error := db.Create(&Users{
20 Name: "テスト太郎",
21 Age: 18,
22 Address: "東京都千代田区",
23 UpdateAt: getDate(),
24 }).Error
25 if error != nil {
26 fmt.Println(error)
27 } else {
28 fmt.Println("データ追加成功")
29 }
30}
31
32func getDate() string {
33 const layout = "2006-01-02 15:04:05"
34 now := time.Now()
35 return now.Format(layout)
36}
37
38// SQLConnect DB接続
39func sqlConnect() (database *gorm.DB, err error) {
40 DBMS := "mysql"
41 USER := "go_example"
42 PASS := "12345!"
43 PROTOCOL := "tcp(localhost:3306)"
44 DBNAME := "go_example"
45
46 CONNECT := USER + ":" + PASS + "@" + PROTOCOL + "/" + DBNAME + "?charset=utf8&parseTime=true&loc=Asia%2FTokyo"
47 return gorm.Open(DBMS, CONNECT)
48}
49
50// Users ユーザー情報のテーブル情報
51type Users struct {
52 ID int
53 Name string `json:"name"`
54 Age int `json:"age"`
55 Address string `json:"address"`
56 UpdateAt string `json:"updateAt" sql:"not null;type:date"`
57}
「テスト太郎」が追加されたら成功です!
データの取得をしてみましょう
では、追加したデータを表示させたいと思います。
特に、検索条件がない場合は、とても簡単です。
1package main
2
3import (
4 "fmt"
5 "time"
6
7 _ "github.com/go-sql-driver/mysql"
8 "github.com/jinzhu/gorm"
9)
10
11func main() {
12 // db接続
13 db, err := sqlConnect()
14 if err != nil {
15 panic(err.Error())
16 }
17 defer db.Close()
18 addUserData(db)
19
20 result := []*Users{}
21 error := db.Find(&result).Error
22 if error != nil || len(result) == 0 {
23 return
24 }
25 for _, user := range result {
26 fmt.Println(user.Name)
27 }
28}
もちろん、「検索」をするのも簡単です。
1db.Where("name LIKE ?", "%テスト%").Find(&result)
このように、LIKE検索なども、サクッと実装できてします。
クエリについては、以下の公式ドキュメントを参考にすれば、大体のことは出来るはずです!
【公式ドキュメント】
http://gorm.io/ja_JP/docs/query.html
データの取得までで結構なボリュームになってしまったので、「データの更新」と「削除」は次回にやりたいと思います!
第13回へつづく!
GORMを使うと、Golang(Go言語)でMySQLを扱うのが格段に楽になります。
Golang(Go言語)と RDBMS の親和性は、あまり高くないと聞いたことがありますが、それでも使いたい人は多いハズ!
GORM を使って、みんなで楽しましょう!
次回の記事はこちら
オススメのGo入門本
こちらの記事もオススメ!
2020.08.08Go言語 特集知識編人気急上昇中のGo言語(Golang)って何だ?実装編Go言語(Golang)入門...
2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
第1回の記事はこちら
2019.09.13【第1回】Go言語(Golang)入門~環境構築編~第1回~Go言語(Golang)を習得したい!~笹川先生(株)ライトコードでモバイルアプリケーション開発をしている笹川...
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
笹川(エンジニア)
新潟生まれ新潟育ち本業はモバイルアプリエンジニア。 日々、猫(犬)エンジニアとして活躍中!
おすすめ記事
移転したライトコード大阪オフィスを調査せよ!
広告メディア事業部
2024.04.03
日常
【GCP】BIG QUERYを触り程度に理解してみる
かねまさ(エンジニア)
2024.04.02
IT技術
【Android】Github ActionsでFirebase Test Labの実行を分散する
笹川(エンジニア)
2024.04.02
IT技術
【Next.js】App Router で使用できるキャッシュまとめ
モーリー(エンジニア)
2024.03.29
IT技術
GitHubActionsのランナーに触れてみた
こやまん(エンジニア)
2024.03.28
IT技術