まずMySQLにデータを作ります。
mysql
create database go;
use go
create table users (
id int auto_increment primary key,
name varchar(255),
age int,
address varchar(255),
update_at datetime
);
mysql> describe users;
+———–+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+———–+————–+——+—–+———+—————-+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| age | int | YES | | NULL | |
| address | varchar(255) | YES | | NULL | |
| update_at | datetime | YES | | NULL | |
+———–+————–+——+—–+———+—————-+
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 connect success!") } } func sqlConnect()(database *gorm.DB, err error){ DBMS := "mysql" USER := "hoge" PASS := "fuga" PROTOCOL := "tcp(localhost:3306)" DBNAME := "go" CONNECT := USER + ":" + PASS + "@" + PROTOCOL + "/" + DBNAME + "?charset=utf8&parseTime=true&loc=Asia%2FTokyo" return gorm.Open(DBMS, CONNECT) }
$ /home/vagrant/go/bin/dep ensure
$ go run main.go
DB connect success!
### データ挿入
import ( "fmt" "time" _ "github.com/go-sql-driver/mysql" "github.com/jinzhu/gorm" ) func main(){ db, err := sqlConnect() if err != nil { panic(err.Error()) } defer db.Close() error := db.Create(&Users{ Name: "山田太郎", Age: 20, Address: "東京都港区赤坂1丁目1-1", UpdateAt: getDate(), }).Error if error != nil { fmt.Println(error) } else { fmt.Println("data insert success!") } } func sqlConnect()(database *gorm.DB, err error){ DBMS := "mysql" USER := "hoge" PASS := "fuga" PROTOCOL := "tcp(localhost:3306)" DBNAME := "go" CONNECT := USER + ":" + PASS + "@" + PROTOCOL + "/" + DBNAME + "?charset=utf8&parseTime=true&loc=Asia%2FTokyo" return gorm.Open(DBMS, CONNECT) } 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"` } func getDate() string { const layout = "2006-01-01 15:05:30" now := time.Now() return now.Format(layout) }
$ go run main.go
data insert success!
mysql> select * from users;
+—-+————–+——+———————————+———————+
| id | name | age | address | update_at |
+—-+————–+——+———————————+———————+
| 1 | 山田太郎 | 20 | 東京都港区赤坂1丁目1-1 | 2021-09-09 14:23:20 |
+—-+————–+——+———————————+———————+
1 row in set (0.00 sec)
### データの取得
func main(){ db, err := sqlConnect() if err != nil { panic(err.Error()) } defer db.Close() result := []*Users{} error := db.Find(&result).Error if error != nil || len(result) == 0 { return } for _, user := range result { fmt.Println(user.Name) } }
$ go run main.go
山田太郎
### データの更新
func main(){ db, err := sqlConnect() if err != nil { panic(err.Error()) } defer db.Close() result := []*Users{} error := db.Find(&result).Error if error != nil || len(result) == 0 { return } for _, user := range result { fmt.Println(user.Name) } fmt.Println("update") error = db.Model(Users{}).Where("id = ?", 1).Update(&Users{ Name: "佐藤はじめ", UpdateAt: getDate(), }).Error if error != nil { fmt.Println(error) } result = []*Users{} db.Find(&result) for _, user := range result { fmt.Println(user.Name) } }
$ go run main.go
山田太郎
update
佐藤はじめ
### DELETE
fmt.Println("Delete") error = db.Where("id = ?", 1).Delete(Users{}).Error if error != nil { fmt.Println(error) } result = []*Users{} db.Find(&result) for _, user := range result { fmt.Println(user.Name) }
$ go run main.go
佐藤はじめ
Delete
mysql> select * from users;
Empty set (0.00 sec)
OK、CRUDは一通りわかった🈴