Edited at

MySQLでGo


やりたいこと

ローカル環境で、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")

作成後


mysql.go

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

にアクセス

ちゃんとデータ引っ張ってこれました!!

スクリーンショット 2018-12-06 23.23.50.png


step4 お掃除

mysql.server stop

コードはGithubに配置してあります。

次回はコンテナ化したいと思います。

https://qiita.com/uguisu/items/39cb0faa2e50df3bacaa


参考URL

MacにMySQLをインストールする

Mac へ MySQL を Homebrew でインストールする手順

ユーザーの作成

データベースの作成

GoでMySQLに接続する