golang.tokyo #6 に行ってきました
概要
golang.tokyo #6 に参加しましたので、レポートを記載いたします。
(会場は、DeNAさんでお寿司(食べ損ねた)とお酒をご用意いただいておりました。)
下記は各セッションのまとめです。
Gopher Fest 2017
@tenntenn さん
スライド
概要
サンフランシスコで開催されるGoSFが主催のイベントの参加レポートです。
セッションの中のひとつ The state of Go のお話
The state of Go
Go1.9での仕様変更や標準ライブラリの改善についてのお話
(余談ですが、tip.golang.orgで最新のmasterのドキュメントが見れるそうです)
- Go1.9は5/1にコードフリーズ済み
- 残りはバグフィックスのみ
- リファクタリングを安全にする方法
- Goで安全にリファクタできるのか?
- 定数の場合は問題なし
- 関数はラップして引き継げば問題なし
- 型の場合→ 問題有り
- 型を作る → メソッドが引き継げない
- 埋め込み → キャストができない
- Go1.9でAlias導入
- 言語仕様変更
- 標準ライブラリ変更
- math/bits ビット演算に便利なライブラリ
syc.Map
スレッドセーフなマップhtml.template
がより安全に利用可能に- errorを返却するようになる
- os.Exec
- 環境変数が重複の際、一番後ろのものを優先する
- ソース中で上書き可能
- 環境変数が重複の際、一番後ろのものを優先する
- go testの改善
- vendorを無視するようになった
感想
Go1.9にあたっての改善点のお話がメインとなりました。
@tenntennさんもおっしゃってましたが、 go test
でvendor
配下を
みなくなる修正はなかなか良いですね。
初めてGolangで大規模Microservicesを作り得た教訓
Yuichi Murata さん
スライド未公開(2017/06/01)
概要
GAE/Goで大規模なMicroservices(30くらい)を作った際の、教訓のお話
- いきなりつかってみたため、失敗談が中心
- 構成
- GAE/Go
- Gin/Echo
- Microservices構成
- 結論
- 困ったときはGoの哲学にそったシンプルなアプローチを取る
- Goを過信せずパフォーマンスに気を配る
教訓
1. フレームワークにこだわらない
- Railsの経験から良いフレームワーク探しをこだわって行った
- Gin
- 良い点
- シンプル
- App Engine とのインテグレーション有り
- Framework Context vs App Engine Context
- gin.ContextからApp Engine Contextに派生させられることで解消
- 困った点
- ワイルドカードパスを利用したルーティング
- 良い点
- Echo
- まとめ
2. Interfaceを尊重する
- 独自のエラー型を定義
- こちらの型にerrorを寄せる
- 毎回キャストするのが面倒のため
- こちらの型にerrorを寄せる
- Nilに型がある問題発生
- (参考記事) 絶対ハマる、不思議なnil
- 独自のエラー型を混在させた際に発生
- 独自型とerrorインタフェースでnilの型が異なる
- まとめ
- Interfaceが定義されたものはそのまま利用するほうが自然に実装できる
3. regex compile/ reflectionが遅い
- バリデーション
- JSON Schemaを利用
- GolangでのJSON Schema
- gojsonschema
- go-jsval (たしか..)
- パフォーマンステストで問題発覚
- バリデーションの有無でパフォーマンスに顕著な差が出る
- pprof を利用して実行を解析
- 問題点の解消
- まとめ
4. 非対称暗号は遅い
- 認証・認可処理
- 荒業で解消
感想
GAE/Goでサービスを作る際の問題点がいくつか聞けました。
サービスでの利用はこれからあるかもなので、参考になりました。
またnilに型がある問題は、まだあたったことがないので知れて良かったです。
[LT]ゲーム開発に欠かせないあれをしゅっとみる
ゴリラのアイコンの方(@Konboi)
スライド
概要
- CSVの話
- スマホゲームには欠かせない
- カヤックではデータの受け渡しとしてCSVを利用している
- マスターデータ等
- CSV困る時
- カラムとデータの関連性が見づらい
- 空欄がつらい
- DBにインポートする系はその際にわかる
- 調査系で利用する時つらい
- csviewer
- csvをDBのテーブルを検索するように参照できる
- ライブラリ
- sliceflag
- 同一オプションで複数の値を受け取りたい
- 普段のflagの利用方法と変わらない
- tablewriter
- データをいい感じにテーブル表示してくれる
- sliceflag
[LT] Go Review Commentを翻訳した話
@knsh14 さん
スライド
概要
Go Code Review Commentを読もう
(→ 読みます)
- Go Code Review Commentとは
- コードレビューをする際に見るべき箇所をまとめたもの
- Effective Goの簡略版
- 翻訳してみました(qitta)
- 良かった点
- 正解のパターンを勉強できるところが効率が良い
- 内容
- コードの見た目を改善
- ツールでなんとかしよう
- golintは優秀
- コメントや文章の体裁
- Tips系
- より良いパターンを記載
- 設計の指針
- コードの見た目を改善
- まとめ
- 良いドキュメントの翻訳は英語の勉強に最適
[LT] ScalaからGo
James さん
スライド未公開(2017/06/01)
概要
- 関数型開発はGoでできるか?
- できないですね
- ジェネリクスがないので..
- 関数型開発のコンセプトは利用できるか?
- 利用できる!!
- 関数型開発とは?
- 副作用がない開発
- 副作用あり
- テストしにくい、バグの原因
- 部分適用
- Goは初心者が入りやすく会社での導入がスムーズに行える点が良い
[LT] Crypto in Go
概要
- Goにおける暗号アルゴリズムの利用
- AES
- 固定長でしか利用できない
- AES + Padding + HMac
- 行数があって面倒
- AES + GCM
- 機密モード + 認証モードがひとつに
- とってもシンプル
まとめ
各セッションとLTについて、ざっくりと記載いたしました。
詳細知りたい際は、スライドが公開されるはず(ほぼされてますが)ですのでそちらをご参照ください。
全体的に有意義な発表が聞けて楽しかったです。
開催いただきありがとうございました。(次回も参加したいです)