LoginSignup
51
36

More than 5 years have passed since last update.

Golang + Echo + MySQL まとめ

Last updated at Posted at 2016-09-09

Golang + MySQLで何かapiを作ろうと思って調べたら、たくさん情報が出てきたのでまとめてみる

基本設計

基本的な流れはこれに従う。
Golang+Echo+dbrでMySQLのCRUDをする/JSONでDBの値を返却する話

Echoの使い方は、以下を参照。
Go製のフレームワークechoを使ってJSONを返すWebサーバーを作り、GoogleAppEngineで動かす
Go の echo ってWebサーバーでサクッと REST しちゃう

Echo公式サイト
Fast and unfancy HTTP server framework for Go (Golang).

(気になったのでメモ。Echo公式サイトでは、carbon adsという、ヒートマップを計測するサービスを使っているらしい)

Golangの構造体で 「`」の記法について気になったので調べた

What are the use(s) for tags in Go?

どうやら、構造体のメタデータらしい。

GoangでMySQLを扱う方法についてまとめ

golangでSQLを叩くライブラリまとめ[基本/クエリビルダ/ORM]
Go database/sql tutorial

MySQLに接続するときの接続文字列について調べた。go-sql-driver/mysqlについて調べると、案外早く見つかった
Golang Cafe #4 補足 データベースアクセス(MySQL編)
go-sql-driver/mysql でプレースホルダ置換をサポートしました

INT(11)の正体はこれで確認
MySQL(MariaDB) - 整数型の範囲!

MySQL "show users" - how to show/list the users in a MySQL database

-- DB作成
CREATE DATABASE IF NOT EXISTS db_name;

-- ユーザー作成
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT,UPDATE,INSERT,DELETE ON 'db_name'.* TO 'username'@'localhost';
FLUSH PRIVILEGES;

-- テーブル作成
CREATE TABLE db_name.table_name (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  created_at DATETIME NOT NULL,
  updated_at DATETIME NOT NULL
);


-- ユーティリティー系
-- MySQLユーザー一覧の確認
SELECT User,Host FROM mysql.user;
-- データベース一覧
SHOW DATABASES;
-- データベース詳細情報一覧
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA;
-- データベース作成時のSQL文を表示
SHOW CREATE DATABASE db_name;
-- テーブル一覧
SHOW TABLES FROM db_name;
-- テーブルの構造を表示
DESC db_name.table_name;
-- APPデータベース定義
CREATE TABLE counters (
  id INT NOT NULL AUTO_INCREMENT,
  host_id INT NOT NULL,
  path varchar(2047) NOT NULL DEFAULT '/',
  count INT NOT NULL,
  created_at DATETIME NOT NULL,
  updated_at DATETIME NOT NULL,
  PRIMARY KEY (id)
);
ALTER TABLE counters ADD INDEX index_host_id_and_path(host_id, path(255));

CREATE TABLE hosts (
  id INT NOT NULL AUTO_INCREMENT,
  host_name varchar(255) NOT NULL,
  created_at DATETIME NOT NULL,
  updated_at DATETIME NOT NULL,
  PRIMARY KEY (id)
);
ALTER TABLE hosts ADD INDEX index_id(id);

MySQL型一覧

説明 指定形式 別名
tinyint 8bit整数。 tinyint(n) [unsigned] [zerofill]
smallint 16bit整数。 smallint(n) [unsigned] [zerofill]
mediumint 24bit整数。 mediumint(n) [unsigned] [zerofill]
int 32bit整数。 int(n) [unsigned] [zerofill] integer
bigint 64bit整数。 bigint(n) [unsigned] [zerofill]
decimal パック10進数。 decimal(n, d) [zerofill] dec,numeric
float 浮動小数点数。4または8バイト。 tinyint(n) [zerofill]
double 浮動小数点数。 double(n) [zerofill]
double precision 倍精度浮動小数点数。 double precision(n) [zerofill] real
char 固定長文字列型。 char(n) [binary]
varchar 可変長文字列型。 varchar(n) [binary]
tinytext 可変長文字列型。255バイト以下。 tinytext
text 可変長文字列型。65535バイト以下。 text
mediumtext 可変長文字列型。1677215バイト以下。 mediumtext
longtext 可変長文字列型。4294967295バイト以下。 longtext
date 日付型。 date
datetime 日付時刻型。 datetime
timestamp 日付時刻型n桁。 timestamp(n)
time 時刻型。 time
year 年。2または4桁。 year(n)
tinyblob 8bit整数。 tinyblob
blob 8bit整数。 blob
mediumblob 8bit整数。 mediumblob
longblob 8bit整数。 longblob
enum 列挙型。 enum('文字列1',文字列2'',...)
set 文字列セット型。 set('文字列1',文字列2'',...)

※ 引用: http://www.k-cube.co.jp/wakaba/server/mysql_type.html

MySQL主な列フラグ

列フラグ 概要
AUTO_INCREMENT 自動連番(データ型は整数型※1)
DEFAULT 'デフォルト値' 値が未指定の場合のデフォルト値
[NOT] NULL NULLを許容する[しない] (デフォルトはNULL)
PRIMARY KEY 重複する値を許さない (NULL値は不可)
UNIQUE 重複する値を許さない (NULL値を許可)
REFERENCES テーブル名(列名, ....) 外部参照制約

MYSQL主なオプション

オプション 概要
PRIMARY KEY (列名, ....) 主キーを設定
INDEX インデックス名 (列名, ....) インデックスを作成(NULL値は不可)
UNIQUE インデックス名 (列名, ....) 重複した値をゆるさない(NULL値は不可)
FOREIGN KEY (列名) REFERENCES テーブル名 (列名, ....) 外部参照制約

MySQLの整数型とは

整数型は以下の5種類

  • TINYINT
    -128から127 (符号無しの場合0から255)

  • SMALLINT
    -32768から32767 (符号無しの場合0から65535)

  • MEDIUMINT
    -8388608から8388607 (符号無しの場合0から16777215)

  • INT
    -2147483648から2147483647 (符号無しの場合0から4294967295)
    別名:INTEGER

  • BIGINT
    -9223372036854775808から9223372036854775807
    (符号無しの場合0から18446744073709551615)

※ 引用: http://www.dbonline.jp/mysql/type/index1.html

GolangでMySQLを扱うときに一番使われているらしいライブラリ

Go Relational Persistence

作ったアプリのソースコード

package main

import (
    "net/http"
    "github.com/labstack/echo"
    "github.com/labstack/echo/engine/standard"
)

func main() {
    e := echo.New()
    e.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello, World!")
    })
    e.Run(standard.New(":1323"))
}
$ curl localhost:1323
Hello, World!%

参考資料

51
36
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
51
36