一昨日のFlashAirハッカソンに続き、今日は株式会社グノシーさんで行われたGo言語の勉強会であるGunosy.go#12に参加してきました。
今回のテーマは”GolangNotHttpNight”という事で、httpを使わないGo言語という切り口でさまざまな発表が行われました。
(追ってプレゼン資料とかも公開されるかと思うのでメモ書きで)
gomaについて
- JavaのDomaにインスパイアされたDBアクセスフレームワーク
- CRUDするコードを生成(dao/entity/sql)
- SQLファイルはそのまま使える
- DB側を正とするため、テーブル定義が変わっても再生性すればOK
- 別のSQLライブラリと併用して使える
- go-bindataを使ってバイナリにパッケージ化することも可能
- xormを使ってテーブル構成情報を取得
- テンプレートエンジンにはERB風のegoを使用
golintを使おう
- 17個の関数でファイルごとにチェック
- lint.goしきい値を設定
go-timeoutもしくはUnixツールをgolangで書く話
- mackerelエージェントはGo言語製
- 内部ではメトリクス投稿と収集それぞれのgoroutineを実行
- チャンネルをキューのように管理
- エージェントのプラグインはGolangじゃなくてもOK
- GNU CoreutilsのtimeoutコマンドをGolangで
- plan9はexit codeが数字じゃない
- GolangでUnixっぽい事をやろうとすると大変
Golang+RasPiで趣味的IoT入門的な話
- gobotとembdの利用推奨
- GOARCH=arm go buildしたものがRasPiで動く
- gobotはMQTTも初期からサポート
- embdはもう少し低レイヤ
- 軽量などで個人工作での組み込みには使いやすい
Goでのステート管理の仕方
- HTTPは基本stateless
- cookieなどを使って間接的にステート管理
- FSM(有限状態機械)
- gotoでどんなFSMも書けるが見通しが悪い
- tail call elimination(末尾再帰)
- 関数と同じシンタックスでgotoを書ける
- 最適化などの影響で実装系に依存
- goroutineだとスタックを消費しない
- 複数のFSMが同時に動く状態を自然に書ける
- Golangでも将来的にはtail call eliminationが改善されるかも?
GoとTOML
- XMLは人間が書くものじゃない
- TOML = Advanced INI
- 人間が読みやすく配列&階層構造が扱える
- BurntSushi/toml
- DecodeFile呼び出しで構造体に値がマッピングされる
- 設定をTOMLにエクスポートすることも可能
Goでゲームを作る
- cgoを使ってOpenGLを呼べる
- GCあっても二次元のゲームくらいなら大丈夫
- gxuiはシンプルなターンベースゲームならいける
- Ebiten
- SNESライクな2Dゲームフレームワーク
- ENGi
- もう一つの2Dゲームフレームワーク
- Updateはどういうタイミングで呼ばれるのか分からない
- 引数のdtを使って時差が分かる
DBじゃないoracleの話
- Golangは公式や準公式の支援ツールがたくさんある
- golang.org/x/tools/oracle
- IDEのようなソースコード解析
GoConについて
- GoCon 2015 Summer
- まだ計画中
この後の懇親会では、みなさんの会話に耳を傾けつつ、Go言語を会社で導入していくための四方山話や最近の開発動向など、刺激のある時間を過ごすことができました。
(+ピザごちそうさまでした!)
個人的にはgobotやembdのIoT回りが意外と充実しているのを知ることができたのが収穫でした。この前のFlashAirハッカソンと合わせて、開発にGo言語を使ってみるきっかけにしていきたいところです。