gunosygo.png

一昨日の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入門的な話

  • gobotembdの利用推奨
  • 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について

この後の懇親会では、みなさんの会話に耳を傾けつつ、Go言語を会社で導入していくための四方山話や最近の開発動向など、刺激のある時間を過ごすことができました。
(+ピザごちそうさまでした!)

個人的にはgobotやembdのIoT回りが意外と充実しているのを知ることができたのが収穫でした。この前のFlashAirハッカソンと合わせて、開発にGo言語を使ってみるきっかけにしていきたいところです。