引き続きTODOリストを作っていきます。
今回は、GoでDBに接続します。
使い慣れているMySQLを利用します。
下記の書籍を参考にさせていただいています。
DB連携環境
Pull Requestはこちら
https://github.com/nek0meshi/todo-list/pull/5
docker-composeの設定です。
db: image: mysql:8 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: sample MYSQL_USER: sample MYSQL_PASSWORD: sample TZ: 'Asia/Tokyo' command: mysqld volumes: - db-data:/var/lib/mysql - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf:ro - ./environment/sql:/work/sql:ro working_dir: /work volumes: db-data:
mysql:8を使っています。
volumes: db-data
を定義し、データの管理はDockerにやってもらいます。
GOの環境用にDockerfileを作ります。
FROM golang:1-alpine RUN apk add --no-cache git RUN go get -u github.com/go-sql-driver/mysql
mysqlへの接続のためのライブラリ go-sql-driver/mysql
をdownloadするのと、そのためにgit
を導入しています。
プログラム
MySQLサーバと接続します。
db, err = sql.Open("mysql", "sample:sample@tcp(db:3306)/sample")
DBからデータを取得し、定義した構造体Task
に値を代入します。
err = db.QueryRow("SELECT * FROM tasks WHERE id = ?", 1).Scan(&task.ID, &task.Name, &task.Status)
リクエストに対して、Hello World! タスク1!
と返却します。
タスク1
は、DBから取得したレコードのname
カラムです。
(雑なセンテンスですが、前回の実装をそのまま使ったため...。 )
fmt.Fprintf(w, "Hello World! %s!", load())
ブラウザから呼び出すとこんな感じです。
プログラム終了時にDB接続を解除します。
(defer
は、メソッドの最後に呼ばれる模様...)
defer db.Close()
まとめ
今回は簡単なDB接続を行いました。
次回からはTODOリストとしての機能を実装していく予定です。