SSブログ

Go 言語で MySQL にアクセスしてみる [golang]

http://nakagami.blog.so-net.ne.jp/2013-08-24 の続き。
プログラミング言語を学ぶのに大事なのは自分で何か役に立つ(or おもしろい)コードを書くことだと思う。
というか、役に立つプログラムを書けないんだったら、あんま意味がない。
人によって何が役に立つのかっていうのは違うし、興味のある分野も違うと思うけど、僕でいうと MySQL のデータを操作できるようになると使い道もありそうなので、まずは Go 言語で MySQL を操作できるようにすることを目指す。

MySQL のドライバーがいくつかあるけど、どれがオススメ?
stackoverflow にあった。さすが stackoverflow サンプルコードもあって助かる。
http://stackoverflow.com/questions/11353679/whats-the-recommended-way-to-connect-to-mysql-from-go
やっぱり http://nakagami.blog.so-net.ne.jp/2013-08-24 の時に調べたドライバーのどっちからしい
https://github.com/ziutek/mymysql
https://github.com/go-sql-driver/mysql/
リポジトリを見ると、今時点では mymysql のほうが、最近まで commit されていて App Engine CloudSQL のサポートとか Native エンジンとか Thread safe エンジンとか色々やってる。
サイトの README.md に使い方の説明が詳しい。
go-sql-driver よりも高機能なのか、やり過ぎなのかよくわからない

import するライブラリは違っていて、接続(Open) の時のパラメータは違うけど、Interface が同じものなので、ドライバーは違っても同じコードになる。なるほど。
他の RDBMS も database/sql のインターフェースを使ってアクセスするのね。

Python を使っていると、クエリーを発行するメソッドが
1. 実行して結果が必要ないのが Exec()
2. 1行だけ結果を取得するのが QueryRow()
3. 複数取得したいのが Query() と
と分かれているのがなじめないけど、そういうもんなので慣れよう。

コードの断片だとわからないので、動くサンプルコード書いた
https://gist.github.com/nakagami/6349319

Go 言語のお勉強 [golang]

Go 言語、どんなもんか調べようかと思ったら、思いのほか日本語ドキュメントが充実してるし、言語仕様は(僕には)わかりやすいし、ライブラリは充実しているし、
「うぉー、こんないいもんだとは知らんかった。もっと早く勉強しておけばよかった」
と思った、そんな土曜日。

Go で何か書いてみたい。

【入門 Go 言語、自分が読んだ順】
Go ツアー (A Tour of Go) 日本語訳
http://go-tour-jp.appspot.com/#1

Pythonista向けGo言語入門
http://python.matrix.jp/2013/05/12/go_start2.html

go言語の始め方(1)
http://python.matrix.jp/2013/05/09/go_start1.html

Go プログラミング言語のチュートリアル
http://golang.jp/go_tutorial

実践 Go 言語
http://golang.jp/effective_go

【雑感】
「A Tour of Go」が素晴らしい。これだけで、プログラミングを最初に学ぶ人に Go 言語をおすすめしたくなるレベル
C 言語を知ってると理解しやすい
いきなり Go だと、やっぱりポインタでつまづく人が多いんだろうと予想
Slice は Python と同じなので Python 知ってると理解しやすい
Slice は make で作って capacity がある点に気をつける。我ながら、はまる予感
map も make で作らないといけない。忘れそう。
ついに switch が break 書かなくても fall しない
Method の、struct の外に書くという書き方慣れない
Interface Java の Interface と似ているような似ていないようなで難しい


【その他いろんな URL をメモっておく】
golang.jp (Go言語日本語情報サイト)
http://golang.jp/

本家
http://golang.org/

サイボウズエンジニアの WIKI - Go メモ
https://cybozu.atlassian.net/wiki/pages/viewpage.action?pageId=6422530

What's happening in Go tip (2013-08-23)
http://dominik.honnef.co/go-tip/2013-08-23/

何かプログラムを書いてみたいのだけど・・・
MySQL のドライバー(どっち使うのがいいのかよくわかんない)
https://github.com/ziutek/mymysql
https://github.com/go-sql-driver/mysql/


(追記)
LL祭りの @ymtongpoo の LT
http://www.slideshare.net/ymotongpoo/20130824-lightweight-language

Go 言語が初心者が見ると幸せになれる場所 Qiita
http://qiita.com/tenntenn/items/0e33a4959250d1a55045

(さらに追記)
WAF は Reven っていうのが一番メジャーなのかな
http://qiita.com/futoase/items/8134bd96a5c950c497c7
http://robfig.github.io/revel/