2013年11月27日水曜日

Golang Cafe #5

11/24(日)に開催された「Golang Cafe #5」に参加してきました。

参加者は +Takashi Yokoyama さん、+Takanobu Hagino さん、私の3名でした。

今回はosパッケージを見て行くことになりました。個人的にはPythonのosモジュールと似た感じに思えたので、あまり違和感なく見始めることができました。

ファイルに関しては読み込み・作成・削除を、ディレクトリーに関してはカレントの変更・作成・削除を、ソースを記述してgo runコマンドで実行して動作を確認しました。

関連するソースを見ていくと、何れは広大なsyscallパッケージに辿り着く結果に...(^^;)

大したことではないのですが、ソース内の次のコメント文が気になりました。

// +build darwin freebsd linux netbsd openbsd windows

公式サイトではOpenBSD用のバイナリー版インストーラーは見受けられませんが、ソースからコンパイルすればインストールできるであろうことが読み取れました。

あと、東京では12/20(金)にGo年会が開催されるということで、こちらも「12月の何れかの開催日を"Goな1年"を振り返る会にしよう」という話にもなりました。

詳細&技術な内容につきましては、横山さんや萩野さんのブログをご覧下さい。
# 各自でもくもくして、かつ、時間通り(?)に終えたので、いつもより少なめかも...


今回は、Windowsユーザーの萩野さんがsyscall_windows.goのidやownを取得する関数群において、軒並み「return EWINDOWS & -1」攻撃を受けて悶絶されていたのが印象的でした(^^;)
# 横山さんと私はOS Xユーザーです。

ちなみに、今回は「カレー」でした!

[2013.11.29] 萩野さんのブログへのリンクを追加しました。

2013年11月21日木曜日

Golang Cafe #4

11/17(日)に開催された「Golang Cafe #4」に参加してきました。

参加者は +Takashi Yokoyama さん、+Takanobu Hagino さん、私の3名でした。

今回はdatabase/sqlパッケージとlib/pqドライバーを使ってPostgreSQLへのアクセスを試みました。

数あるGoのデータベースドライバーの中からpqが選択されたのは、ピュアGoで地雷も少ないだろうという理由からでした。

私にとって初のPostgreSQLでしたので、brewでインストールしてから参加しました。

$ brew install postgresql

開始早々、今回も簡単に「プチPostgreSQL勉強会」を開催して頂きました。
# すぐに本題のGoに入れず、すみませんm(__)m > メンバー各位

(1) ホームディレクトリー配下に「data」という名前でデータベース情報を格納するディレクトリーを作成。

$ cd
$ mkdir data

(2) PosgreSQLのコマンドパスにカレントディレクトリーを移動。
# 早く本題に入りたかったので、.bashrcなどへの追加作業は後回しに。

$ cd /usr/local/Cellar/postgresql/9.3.1/bin/

(3) データベースクラスターを作成。

$ ./initdb ~/data/

(4) データベースサーバーを起動。

$ ./pg_ctl -D ~/data/ start

(5) 「sampledb」という名前でデータベースを作成。

$ ./createdb sampledb

(6) 「sampledb」データベースが作成されていることを確認。

$ ./psql -l
                              List of databases
   Name    | Owner | Encoding |   Collate   |    Ctype    | Access privileges 
-----------+-------+----------+-------------+-------------+-------------------
 postgres  | usrid | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
 sampledb  | usrid | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 

(7) 「sampledb」に接続。

$ ./psql -d sampledb

(8) テーブル定義ファイル「table.sql」を実行してテーブルを作成。

sampledb=# \i $GOPATH/src/golangcafe/sample.com/dbtest/table.sql
CREATE TABLE
CREATE TABLE
INSERT 0 1
INSERT 0 1

pqドライバーは go get コマンドでインストールしました。

$ go get github.com/lib/pq

今回のサンプルも横山さんのGitHubから取得して使用しました。
# お忙しい中、毎回、ありがとうございますm(__)m > 横山さん

$ cd $GOPATH/src
$ git clone https://github.com/tyokoyama/golangcafe

テストファイル「db_test.go」にて、データベース接続のためのユーザー名を書き換えて、

$ vi golangcafe/sample.com/dbtest/db_test.go

 10 func getConnection() (*sql.DB, error) {
 11 //  return sql.Open("postgres", "user=gdgchugoku dbname=sampledb sslmode=verify-full")
 12     return sql.Open("postgres", "user=[ユーザー名] dbname=sampledb sslmode=disable")
 13 }

go test コマンドでテストを実行して、接続を確認しました。

$ go test golangcafe/sample.com/dbtest/db_test.go 
ok   command-line-arguments 0.056s

今回は、横山さんが目指していた本来の姿である「もくもく会」状態となり、途中からツイートもなくなる程に全員がのめり込んでコーディングを行っていました。

個人的には、課題であった insert, update, delete 文の実装までは行えましたが、内容を理解するまでには至らなかったので、公開される他メンバーのブログを拝見しつつ復習させて頂きますm(__)m

今回も(!?)肝心のdatabase/sqlでのデータベースアクセスについては書けておりませんので、詳細&技術な内容につきましては、横山さんや萩野さんのブログをご覧下さい。


ちなみに、今回は「名物ビーフストロガノフ」でした!

[2013.11.24] 萩野さんのブログへのリンクを追加しました。

2013年11月13日水曜日

Golang Cafe #3

11/10(日)に開催された「Golang Cafe #3」に参加してきました。

参加者は +Takashi Yokoyama  さん、+Takanobu Hagino さん、私の3名でした。

今回も横山さんに資料を用意して頂き、Go言語の目玉機能の一つである「GoroutineとChannel」について学びました。

今回の資料はGitHub上に用意されたため、まずは「プチgit勉強会」から始まりました。

(1)  横山さんのGitHubから資料(ソース)を取得。

 $ git clone https://github.com/tyokoyama/golangcafe

(2) カレントを移動。

 $ cd golangcafe/sample.com/goroutines/

(3) タグの一覧を確認。
  # Step7〜Step9は頭文字が大文字なので注意。

 $ git tag
 Step7
 (省略)
 step6

(4) ブランチを「step1」に切り替え。

 $ git checkout step1
 Note: checking out 'step1'.
 (省略)
 HEAD is now at d965486... Golang Cafe 3日目(Step1)

(5) ソースを変更したり実行したり。

 $ vi main.go
 $ go run main.go

(6) ブランチを「step2」に切り替えようとすると、ソースを変更しているためアボート

 $ git checkout step2
 error: Your local changes to the following files would be overwritten by checkout:
 (省略)
 Aborting


(7) 今回は閲覧がメインでコミットはしないので、ソースの変更を破棄してHEADへ。

 $ git reset --hard HEAD
 HEAD is now at d965486 Golang Cafe 3日目(Step1)

(8) ブランチを「step2」に切り替え

 $ git checkout step2
 Previous HEAD position was d965486... Golang Cafe 3日目(Step1)
 HEAD is now at ee7c1f7... Golang Cafe #3 Step2

上記の(4)〜(8)の手順を繰り返してstep1からStep9までのソースを閲覧したり書き換えたりして動作確認しながら進められました。

肝心のGoroutine&Channelについて書いていないが、まぁ、いっか(^^;)

詳細&技術な内容につきましては、横山さんや萩野さんのブログをご覧下さい。


ちなみに、今回は「エッグカレー」でした!

[2013.11.15] 萩野さんのブログへのリンクを追加しました。

2013年11月4日月曜日

Golang Cafe #2

11/3(日)に開催された「Golang Cafe #2」に参加してきました。

今回も参加者は +Takashi Yokoyama さん、+Takanobu Hagino さん、私の3名でした。

主催者の横山さんより「Webアプリ作成で使ったりして実用的」ということで、今回は「encoding/json」パッケージのソースリーディングを行うことになりました。

ウォーミングアップがてら、前回のExsampleの復習を始めましたが、godocコマンドまわりで思った以上にハマり、軽く30分を経過...(^^;)

仕切り直して、言語や文法の解説を交えつつ本題のMarshal関数の読み進めを開始。内部で使用されいる関数を追っていくと「reflect」パッケージのtype.goやvalue.goとを行ったり来たりして、リフレクションを知らないとちょっとツラい状況に。

ソースはコンソールで閲覧していましたが、途中で力尽きて「LiteIDE」に頼らせて頂きました。
# go1.2に対応するといいなぁ...

あとは、クォート文字(シングル「'」、ダブル「"」、バック「`」)の違いについて調べたりもしました。

そうこうしている間に、気が付けば終了時間を30分程オーバー。ソースを読み込むには「力」が必要ですが、いろいろと勉強になります。

クロージングの際、Go言語の特徴について質問があり、「言語レベルで並列処理をサポートしている」という話から、次回はGoroutine/Channelを扱う予定になりました。

詳細&技術な内容につきましては、横山さんや萩野さんのブログをご覧下さい。


ちなみに、今回は「チーズカレー」でした!

[2013.11.08] 萩野さんのブログへのリンクを追加しました。