#やりたいこと
ローカル環境で、GoでMySQLのデータを取ってきます。
Goでnet/httpしてみるの若干続き的なところがあります。
#やってみた
##step1 MySQLを準備
homebrewでインストール
$ brew update
$ brew install mysql
起動
$ mysql.server start
初期設定
$ mysql_secure_installation
rootでmysql実行
$ mysql -uroot -p
ユーザー作成
mysql> CREATE USER ユーザー名@localhost IDENTIFIED BY 'パスワード';
テーブル作成
mysql> CREATE DATABASE goods;
権限付与
mysql> grant all on goods.* to 'ユーザー名'@'localhost';
ユーザー切り替え
mysql> quit
$ mysql -u ユーザー名 -p
データベース接続
mysql> use goods;
テーブル作成
mysql> CREATE TABLE fruits( NAME varchar(20), AMOUNT int, ID int AUTO_INCREMENT NOT NULL PRIMARY KEY);
データ挿入
mysql> INSERT INTO goods.fruits(NAME, AMOUNT) value('orange', 50);
テーブル確認
mysql> select * from fruits;
+--------+--------+----+
| NAME | AMOUNT | ID |
+--------+--------+----+
| orange | 50 | 1 |
+--------+--------+----+
1 row in set (0.01 sec)
##step2 Goを準備
###SQL Driver
ドライバーのバッケージがあるのでインストールします。
go-sql-driver mysql
$ go get -u github.com/go-sql-driver/mysql
ドライバーをインポートするだけで、API使えるようになります。
ドライバーにmysqlを指定して、dataSourceNameを指定します。
import "database/sql"
import _ "github.com/go-sql-driver/mysql"
db, err := sql.Open("mysql", "user:password@/dbname")
作成後
package main
import (
"database/sql"
"encoding/json"
"net/http"
_ "github.com/go-sql-driver/mysql"
)
func handler(w http.ResponseWriter, r *http.Request) {
//db接続
db, err := sql.Open("mysql", "yourname:yourpass@/goods")
if err != nil {
panic(err.Error())
}
defer db.Close()
//構造体
type Fruit struct {
ID int `json:"id"`
Name string `json:"name"`
Amount string `json:"amount"`
}
var fruit Fruit
//selectしたものを挿入
err = db.QueryRow("SELECT id,name,amount FROM fruits").Scan(&(fruit.ID), &(fruit.Name), &(fruit.Amount))
if err != nil {
panic(err.Error())
}
//jsonを生成
res, err := json.Marshal(fruit)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
//header
w.Header().Set("Content-Type", "application/json")
//write
w.Write(res)
}
func main() {
http.HandleFunc("/getfruit", handler) // ハンドラを登録してウェブページを表示させる
http.ListenAndServe(":8080", nil)
}
##step3 できたか確認
go run mysql.go
http://localhost:8080/getfruit
にアクセス
##step4 お掃除
mysql.server stop
コードはGithubに配置してあります。
次回はコンテナ化したいと思います。
https://qiita.com/uguisu/items/39cb0faa2e50df3bacaa
#参考URL
MacにMySQLをインストールする
Mac へ MySQL を Homebrew でインストールする手順
ユーザーの作成
データベースの作成
GoでMySQLに接続する