umegusa's blog

備忘録

ヒカルのgo#4に参加してきました!

golang触り始めてまだ1,2週間とかで
A Tour of Goを一通りみて演習課題をすっ飛ばしつつ進めていた私ですがgolangの勉強会に参加してきました。
今回参加してきたのはこちら。

ヒカルのgo! #4 (hikarie.go) - connpass

golang初心者〜中級者向け勉強会です。

会場の雰囲気と参加層

雰囲気はそんなに固い感じでもなく発表自体も初心者向けということで初心者でも割と理解できる内容でした。
golangも触ったことない人が半分以上でとりあえず聞いてみようの精神の人が多かったんじゃないかなーと。
懇親会はおいしいご飯食べながらだらだらしゃべる感じでいい雰囲気でした。

参加してみて

結論から言うとwebアプリケーション作成を行う場合は茨の道だなーという印象でした。
理由はDB処理がとても苦手ということ、ベストプラクティスがないことの二つです。
API開発とかには使えそうだけどこったWebアプリケーションの作成は修羅の道なるんじゃないかな、、、
ただ低レイヤーなアプリケーション(コンソールアプリケーションやらクライアントアプリケーションやら)などは活躍がかなり期待できそうな感じです。
Cっぽく書けそうだしそっちの人も入りやすい言語だよと言うお話を伺いました。

goも1.1が出てやっとメジャーになってきましたがまだノウハウなどは全然足りないような感じみたいです。
話題になっている言語なので盛り上げていきたいですよね!

発表内容

今回の勉強会では発表/LT/ハンズオン/懇親会の4部構成でした。
発表内容はこんな感じでした。

RDB

golangSQLをたたくには?というお話でした。
結論としては銀の弾丸はない、ということでこれです!!という決定版がないことです。
これがあるのでDBの扱いは苦手なのかなと感じています。
goでSQLを扱う方法は主に3つあるみたいです。

  • SQLをたたく

自分でSQLを作成してたたくという方法です。
取得した値を構造体に突っ込むんですが、そのマッピングなどは手動で行う必要があります。
使用するライブラリは標準のものになります。

  • SQLクエリビルダーを使用する

SQLよりも抽象度が高くなったものです。
マッピングは自身で行う必要がありますが、SQLの作成を助け、SQLをオブジェクトとして作成し、そのオブジェクトを渡して実行するという動きをします。
クエリの作成が簡単にでき、クエリのタイプミスを減らすことができたり、再利用可能なクエリを書き出したりできます。

ただし、非対応なSQL構文もあるみたいです。

  • サブクエリ
  • SELECT CASE
  • UNION

これらに対応しているライブラリは現在ないそうです。
また、リレーション(JOIN)にも対応していないみたいなのですが、生のSQLも埋め込むことができるのでその辺の若干の手間が発生します。
それでも、かゆいところに届かないですが、クエリの作成、実行などは楽になりそうな気がしました。

squirrelというライブラリを使用すると下記のように書くことができます。

import sq "github.com/lann/squirrel"

users := sq.Select("*").From("person").Where(sq.Eq{"name": []string{"hoge", "fuga"})
sql, args, err := users.ToSQL()

// db.Query("SELECT * FROM person WHERE name IN (?,?)","hoge", "fuga")

ちなみにプレースホルダーもsquirrelならRDBMSに対応したエンコードプレースホルダーに変換してくれるみたいです、便利

  • ORM

ORMの機能を全て提供してくれているのは現在gormくらいしかないとのお話でした。
gormの機能として紹介されたのはこんな感じです。

中国の方が開発されたらしく、中国では商業利用もされているとか。
ただし、とても高機能でコード量が多く、変な動きをすることもあるというお話です。
ORMではないですが、テーブルマッピング(取得した値を構造体にマッピング)してくれるパッケージの紹介もありました。

  • gorp
  • xorm
  • genmai

gorpの解説があったのですが、こちらは開発が停滞気味(更新が遅い)で、カジュアルにバグを踏むというお話でした・・・w
また、ORMではないので生SQLをたたく必要もあります。

結果として何がいいの?

めんどくさいかバグを踏むかの両天秤ということみたいです。
銀の弾丸はない、というのはこのことだったんですね・・・

マルチプラットフォームインタラクティブシェルを楽になる

長くなってしまったのでさくっと。
goのREPL goreについてのお話でした。
gore便利だけどwindowsで使えないんだけどどうしよう・・・
→ 作ろう!ということで作ったみたいです。
内容はWindows APIをたたいて起動させているみたいですね。

golangを楽しく学ぼう!

まずはA Tour of Goを一通りやって基本機能のパッケージ化、他の言語をgoで翻訳することから初めて行こうぜというお話でした。
Goroutineとchannelとかは後ででも問題ないとのこと、まずは基本で他の言語でもできそうなところから!ということですね。
インターフェースを制するものはgoを制するともおっしゃっていました。

スクレイピングしよう!

ハンズオンです。
hikago-4_handsOn/text01.md at master · 7yan00/hikago-4_handsOn · GitHub
golangのドキュメントをスクレイピングしようと言う内容でした。
詳細はコードをのぞいてみてください!

終わりに

ついていけるか不安がありましたが、楽しく終えることができました。
勉強会はとても敷居の高い場所だと思っていましたが、情報共有の場とか交流を深める場としても使用できそうだなーという感想です。
とりあえず初心者向け勉強会出てみて雰囲気感じるというだけでもありだと思うので、今後も勉強会とかあったら参加していきたいなーと思える勉強会でした!

パッケージ群

最後に今回の勉強会で登場したパッケージ群を軽く紹介して終わりにします。

SQLクエリビルダー。説明は上記を参照してください。

dropboxが提供しているSQLクエリビルダー。
mysqlのみ対応しています。

登壇者の方が作成されているクエリビルダー。
とても軽くとても早いそうです!

ORM。とても大きい。

テーブルマッピング

goのREPL。インタラクティブシェルのお話で出てきたライブラリです。

スクレイピングを簡単にできるライブラリ。
最後のハンズオンで紹介がありました。

以上!