2017-06-01 19:34:21

golang.tokyo#6@DeNA

2017.06.01 に DeNA さんにて、golang.tokyo #6 が行われました。

golang.tokyo #6 - connpass

開幕は DeNA の方のお話だったんですが、何やら DeNA では Go エンジニアを色々募集しているようです!
サーバーのみならず、色んなフィールドで Go を使っているとのことです。

golang.tokyo-6
今日も大勢の方が参加されております。

golang.tokyo-6
出遅れて私はありつけなかったですが、開幕前からお寿司が振る舞われていました!

golang.tokyo-6
私はおビールいただきました。

Gopher Fest 2017 に参加した話 by tenntenn さん

今日は参加レポートをしてくれました。
主に 2017年8月上旬あたりにリリースされそうな Go 1.9 の話。

スライドはこちら。
https://www.slideshare.net/takuyaueda967/gopher-fest-2017

以下、話の中で気になって点のピックアップ。

言語仕様の拡張 - Alias の追加

型にエイリアスが張れるようになるとのこと。
以下のような書き方ができるようになる。

type Applicant = http.Client

この場合、Applicant と http.Client は等価。

いつこれが役立つかというと、型をリネームするようなリファクタリングを行うとき。
以下の手法だとうまく行かない。

(パターン1) 新しい型を作って順次移行する場合

type Applicant Client
  • Applicant は Client に生えていたメソッドを引き継げない。
  • キャストは可能。

(パターン2) 埋め込みを使う場合

type Applicant struct { Client }
  • Applicant は Client に生えていたメソッドを引き継げる
  • しかしキャストはできない

型エイリアスを用いると、

  • 両者等価なのでキャスト不要で交換可能
  • メソッドもそのまま使える、が、エイリアス側に生やすことはできない

参考

ライブラリへの変更

ビット演算ライブラリ

http://tip.golang.org/pkg/math/bits/
各種ビット演算用の某がそろっております。

sync.Map

スレッドセーフなマップが追加に。
しかも make しないで 0 値のまま使えるらしく便利。

os.Exec 環境変数をコードで上書きできるように

環境変数で指定されている値をコード上で上書きできなかった。
Go 1.9 からは後勝ち。より直感的な動作になる。コードで上書きできるように!

などなど。
スライドには出ていませんでしたが、個人的には mips32 向けの softfloat サポートがどうなったか気になります。Go 1.9 でサポートされるんだったような。

次は DeNA の方。

初めて Golang で大規模 Microservices を作り得た教訓 by Yuichi MURATA

DeNA の方です。
AndApp を作ったときに得られた教訓の話。

Gin と Echo をさまよった話でさまざま苦労なさったそうな。
失敗談をメインに話してくださったので、そういうのは割と貴重と思います。

スライドはこちら。
https://www.slideshare.net/yuichi1004/golangtokyo-6-in-japanese

教訓1. Go でフレームワークに拘ることはない。

  • Gin を使って開発を始める。
  • ちょっと困ったことがあって、一部で別のフレームワーク (Echo) を使い始める
  • 両対応しつつ、また Echo 自身の開発がホットなせいで設計がどんどん変わってしまう

というようなことで、聞いているだけでしんどい気持ちでいっぱいでしたが、
結論としては、フレームワークに頼らずに net/http 使っとくのが一番や、という話でした。
ツールに振り回されるとツライですね。納得。

教訓2. Interface を尊重する - エラーの型の話

独自エラー型と error インターフェースを混在させると起こり得る罠。
独自 error は nil 扱いされない問題。
素直に error インターフェースの利用に統一するべきだという結論。

エラーの種類によって分岐したいとき等、結構ひとによってやり方がまちまちだという気がするので、
なにがしかデファクトスタンダードなやり方が示されていると良い気がしますね。

ちなみに、自分が書くときの「エラーで分岐」については、
deeeet さんの Golangのエラー処理とpkg/errors で記載されているやり方に従っている。

regex compile / reflection の遅さ

JSON Schema でバリデーション。
OSS として扱った二種の速度の話。

  • gojsonschema
    • validation のたびに parse & compile するので遅い
  • go-jsval
    • こちらは速い

regex / reflection 等の処理は遅いので、使うときは意識しないといけない

結論

  • Go の哲学。シンプルなアプローチを。
  • 「コンパイルする言語だから速い」と過信せず、パフォーマンスに気を配ろう。

以下、LT。

ゲーム開発で必要な by @konboi

カヤックの方。
スライドはこちら

CSV の話

データの形によっては非常に見にくいCSV。
いい感じに整形してくれるツールを作った!
csvviewer

スターしておきました。

Go code Review Comments を読もう by knsh14

KLabの方。スライドはこちら。
https://speakerdeck.com/knsh14/go-code-review-comment-wofan-yi-sitahua

こういう記事があって、Effective Go 簡易版というか、Go のお作法初級編みたく書かれている。
Go Code review comments

それを日本語訳した!

初学者のみならず、ある程度経験がある人でも読んで損はないと思いました。
認識を改めるというかね。ちなみに社内勉強会で使わせていただきました、感謝!

Scala から Go にきた話 by James さん

エウレカの方。
スライドは発見できませんでした…。

Scala が好きということは分かりました。
悲しいアリクイかわいい。

Crypto in Go by suzuki kengo さん

マネーフォワードの方。

資料はこちら。アライさんですね。
https://paper.dropbox.com/doc/Crypto-in-Go-cWLX9XxHQm6bAPqrZYkjt

難しい。

まとめ

ということで今回も参加させていただきました、ありがとうございました。
失敗談というかアンチパターンというか、そういう話が聞けたのは大きな収穫でした。

2017.06.15 現在、既に次の golang.tokyo が企画されています。
golang.tokyo #7
気になる方は要チェックです!

Share