LoginSignup
5
5

More than 5 years have passed since last update.

MySQLでGo

Last updated at Posted at 2018-12-06

やりたいこと

ローカル環境で、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に接続する

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5