概要
前提
Database : Mysql User : exampleuser Password: examplepass Database Name : exampledb
Database ローカル環境にDockerを利用して立ち上げて置く。以下にMysqlを起動する簡単なdocker-compose.ymlを残します、こちらに関しては別の記事を書きたいと思います。 $ cat docker-compose.yml version: '3.8' services: mysql: image: mysql:latest container_name: mysql_server environment: MYSQL_ROOT_PASSWORD: rootpassword # MySQLルートパスワード MYSQL_DATABASE: exampledb # MySQLデータベース名 MYSQL_USER: exampleuser # MySQLユーザー名 MYSQL_PASSWORD: examplepass # MySQLユーザーパスワード ports: - "3306:3306" # ホスト:コンテナ (MySQL)
プログラミングする
mainモジュールを作成し「github.com/go-sql-driver/mysql」をインポートしてMysqlに接続してみます。
$ mkdir example-db
$ go mod init example.com/example-db
go: creating new go.mod: module example.com/example-db
$ go get github.com/go-sql-driver/mysql
go: added filippo.io/edwards25519 v1.1.0
go: added github.com/go-sql-driver/mysql v1.8.0
$
Databaseべつモジュール
DBエンジン | Driver |
Mysql | github.com/go-sql-driver/mysql |
Postgresql | github.com/lib/pq |
Sqlite | github.com/mattn/go-sqlite3 |
Oracle | database/sql github.com/godror/godror |
MSSql | github.com/microsoft/go-mssqldb |
mongoDB | gi.mongodb.org/mongo-driver/mongo |
ソースを作成
$ vi main.go
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
_, err := sql.Open("mysql", "exampleuser:examplepass@tcp/exampledb")
if err != nil {
log.Fatalln(err)
}
fmt.Println("db connected !")
}
main.goに以下を追加してテーブルの生成を試します。
_, err = db.Exec(`CREATE TABLE users (
id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
PRIMARY KEY (id));`)
if err != nil {
log.Fatalln(err)
}
fmt.Println("created table!")
テーブルの生成の代わりに以下の例で修正してユーザーの挿入を試します。
_, err = db.Exec(`INSERT INTO users (name, email)
VALUES ('user01','user01@example.com');`)
if err != nil {
log.Fatalln(err)
}
defer db.Close()
fmt.Println("insert into user !")
ユーザー挿入の代わりに以下の例で修正して挿入したユーザーをクエリーしてみましょう。
results, err := db.Query(`SELECT id, name, email from users;`)
if err != nil {
log.Println(err)
}
defer results.Close()
user := User
for results.Next() {
err := results.Scan(&user.Id, &user.Name, &user.Email)
if err != nil {
log.Fatalln(err)
}
fmt.Println(user.Id, user.Name, user.Email)
}
クエリーの結果
$ go run .
db connected !
1 user01 user01@example.com
お疲れさん!!