golangの環境を整えてmysqlに接続する

2016.06.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

丹内です。goからmysqlに接続するHello Worldをやってみました。

環境構築

Mac OS X 10.11.15を前提にします。まずはgoコマンドを使えるようにします。あわせてGOPATHの設定をします。

$ brew install go
$ go version
go version go1.6.2 darwin/amd64
$ echo echo "export GOPATH=~/.go" >> ~/.zshrc
$ exec $SHELL -l
$ mkdir .go; cd .go

次に、atomからの開発環境を整えます。こちらのブログを参考にオススメパッケージを入れます。

$ go get -v github.com/alecthomas/gometalinter
$ bin/gometalinter --install --update
$ go get -v golang.org/x/tools/cmd/gorename
$ go get -v github.com/nsf/gocode
$ go get -v github.com/rogpeppe/godef
$ go get -v golang.org/x/tools/cmd/oracle

そしてatomのプラグインも入れます。

$ apm install autocomplete-plus go-plus

サンプルデータ

mysqlで以下のようなデータを入れておきます。

$ mysql -uroot
mysql> create database gosample;
mysql> use gosample;
mysql> desc users;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | mediumint(9) | NO   | PRI | NULL    | auto_increment |
| name  | char(10)     | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> insert into users ( name ) values ( 'tannai' );
Query OK, 1 row affected (0.01 sec)

mysql> select * from users;
+----+--------+
| id | name   |
+----+--------+
|  1 | tannai |
+----+--------+
1 row in set (0.00 sec)

コーディング

mysqlのデータをSELECTして出力するプログラムを書きます。

package main

import (
    "database/sql"
    "fmt"

    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "root@/gosample")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    rows, err := db.Query("SELECT * FROM users")
    defer rows.Close()
    if err != nil {
        panic(err.Error())
    }

    for rows.Next() {
        var id int
        var name string
        if err := rows.Scan(&id, &name); err != nil {
            panic(err.Error())
        }
        fmt.Println(id, name)
    }
}

実行してみます。

$ go run main.go
1 tannai

コンパイルして実行してみます。

$ ls
main.go
$ go build main.go
$ ls
main    main.go
$ ./main
1 tannai

参考URL