URL | https://golangtokyo.connpass.com/event/72986/ |
会場 | TECH PLAY SHIBUYA |
日時 | 2017/12/11(月) 19:00 〜 21:50 |
Toggeter | https://togetter.com/li/1180514 |
闇のBashをGoに置き換える技術(nashiox)
https://speakerdeck.com/nashiox/golang-dot-tokyo-number-11
- 怖くて触れないけどなぜか動いているBashスクリプト(10ファイル2128行)をGoに置き換えた。
- データ加工、ダンプ、インポートを行っていたスクリプト。GNU Parallelも使っていたりしたが、そのへんはgroutineで。
- Goならば
os/exec
によるスクリプト実行やbashライクの書き方を許容しながら少しずつ移管できる。
たしかに
os/exec
で絡めて段階的にアプローチしていくの良さそう。
How Go test tests(timakin)
https://speakerdeck.com/timakin/how-go-test-tests
-
関数がどんな出力をするのかをgo1.9から Examplesで書けるようになった。
-
src/testing
にContributeしようとしたけど、テストの実行結果ってどうテストするんだ? -
src/cmd/go/go_test.go
にgo commandsのテストが書いてある。 -
テスト用のFixtureは
src/cmd/go/testdata/src
の下にある。all.bash
で動けばだいじょぶ!
関数出力までExamplesに書けるようになってたの知らなかった。
標準パッケージの構成知らないこといっぱいあって読めば学び多いんだろうな、そして読まないとなと思った。
5分で学ぶGo2(niconegoto)
- Go2はまだ
Proposal-Accepted
になったProposalがない。OpenなIssueも賛否両論ばかり。 - Rob Pikeが書いたProposalは賛同の意見が多いので、Go2で実現しそうな有力仕様?
-
Proposal
,Go2
でIssue注視していると面白いかも
golang/goのIssueや日々のコミットを追っていくの少しずつだけど自分も始めたいなと思った。
go-sql-driver/mysqlの問題に救われて、そして更新したら死んだ話(shinofara)
go-sql-driver/mysql
を使うとき、SetConnMaxLifetime
をセットしていなかったので、(振り返ってみれば)コネクションがすぐ切れていた。- 今までは再接続されていたのでなんとかなっていた。危ないのでPRで修正されて再接続されなくなった。
- 「Goならよしなにしてくれる」なんて思わずにやることはちゃんとやっておかないと危ないよという教訓。
Goじゃなくとも便利なパッケージや言語仕様に頼っていると、たしかに思わぬところで足を救われる…
全部は無理だが普段使っている機能がどうやって動いているのか知るのは大事だと思った。(自分はGUI作る時に下調べが甘くて後半で設計の修正が必要になったりする)
DIコンテナを使わないDI(morikuni)
https://speakerdeck.com/morikuni/golang-dot-tokyo-number-11
- 依存関係を解決する3つのアプローチ
-
main
にかく
- オブジェクトが増えるたびにmainが肥大化してしまう
-
- DIコンテナを使う。たとえば goldiを使う。
- DIコンテナのDSL覚えないといけない。
-
- DI用のInject関数を定義する。あるオブジェクトについて依存先が引数0個で取得できる関数。
- 依存先が増減してもInject関数内に影響が納まる。
- 詳細は2017/12/12の Go4のアドベントカレンダーで。
ファクトリメソッドパターンとか、ビルダーパターンのDirector
的なのを作るってことかな?
Plugin使えばGoでももっと動的なDIができるのだろうか(C#だとDLLの入れ替えとかでビルド後でもDIコンテナを変更できる)
こんなのもあった。
Go言語とDependency Injection
Go開発を助けるGoツールGo選のGo紹介(haya14busa)
https://docs.google.com/presentation/d/13DQUhFkmAf25ItA1Gpuw0LApEnqhQB-qKN1D-SX7RWk/edit
- goplay コマンドライン用のThe Go Playground client
- gopkgs めちゃくちゃ速くローカルのパッケージ一覧を出す。pecoなどとも相性がよい。
- goverage 複数パッケージのカバープロファイルがとれる。ただしGo1.10から標準で出来るようになる。
- reviewdog 差分結果のLintだけ出してくれる。
- gofmtrlx ちょっとしたカンマ忘れとかを自動修正してフォーマットしてくれるツール
カンマ忘れとか良くするので、gofmtrlx
よさそう。reviewdog使おうと思って使えてないから、今年中に自分のリポジトリに設定しておきたい。
GoでJavaのライブラリを使う(juntaki)
https://speakerdeck.com/juntaki/gokarajavafalseraiburariwoshi-u-number-golangtokyo
- 「ScalaやKotlinをJVMの既存資産を使えるって?それGoでも出来るよ!」って言いたくて
jnigo
とjavago
を作った。 - cgo経由でJNIを使ってGoからJavaのライブラリを使う。
- jnigo JNI wrapper for Go
- javago Java wrapper code generator for Go.
発想とそれを実現させてしまう 💪 腕力 💪 見習いたい!
go tool traceを使ってみよう(nametake)
https://speakerdeck.com/nametake/dollars-go-tool-tracewoshi-tutemiyou
pprof
以外にもgo tool trace
も使ってみよう- ヒープ領域、goroutineの数とか、プロセスの状態とかのタイムラインをweb Viewで見れる。
- System Callとかの呼び出しとか、GCの状況も確認できる。
普通にfmt.Fprintf
していたときとbufio
でバッファ使ってみたときでsyscallの数がどう変わったか、などサンプルベースで説明されたいたのでわかりやすかった。
他の方の記事だが、参考記事。
go tool traceでgoroutineの実行状況を可視化する
Go1.10導入予定のキャッシュビルドについて(zchee)
https://speakerdeck.com/zchee/golang-dot-tokyo-number-11
- Go devel, Go1.10beta1でキャッシュビルドが使えるようになった。
GOCACHE
環境変数が増えている。キャッシュの保存場所。- キャッシュはsha256でハッシュ化されて保存される。雰囲気は
ccache
に近い感じ。 - devl使っていきましょう!
業務で使っていない自分こそdevelopガンガン使える立場だ。(自分はちょっと使って何かしらのツールが動かなくなって辞めるの繰り返しをしている)
発表にはなかったけど、Go1.10ではテスト結果もキャッシュされるようになってコードに変更がないとテストが実行されなくなるとか
(無理やり実行するにはgo clean -testcache
しないといけない)
https://github.com/golang/go/blob/496688b3cf81f92ee55c359cfbd8cd2c9d71c813/src/cmd/go/alldocs.go#L215-L218
// The -cache flag causes clean to remove the entire go build cache.
//
// The -testcache flag causes clean to expire all test results in the
// go build cache.
今年作ったGoツール10(?)選(Songmu)
- horenso cronラッパー
- go-httpdate Perlのhttpdateの移植
- ghg GitHub Releasesのインストーラ
- paranoidhttp プライベートネットワークへのアクセスを禁止する
- go-memcached-tool Perlのmemcached-toolの移植
- blogsync はてなBlog用のCLIクライアント
- ghch Gitのもろもろからチェンジログが作れる
- posttailer ログ監視している時にログローテートが起きてもよしなにしてくれる。
多すぎて5分では全部紹介しきれていなかった。業務で書く→OSSで公開する。こういうサイクルってエンジニアとしてのスキルアップに重要なんだろうなと常々思っている。
Machine Learning with Go を読んで(ysaito)
https://speakerdeck.com/ysaito8015/machine-learning-with-gowodu-nde
- Machine Learning With Go
- ブログに書いてある部分だけでも試してみるのおすすめ
英語のMeetupも主催されているとのこと。 https://www.meetup.com/ja-JP/Tokyo-Gopher-Hub/
機械学習、教養レベルだけでも覚えておくべきなんだろうけどなかなか手が出せていないのでこういう自分の好きなことからつながっている入り口があるのは嬉しい。
MP3 デコーダを C から移植した話(星一)
- go-mp3
io.Reader
が使えるC
から移植したMP3 Decoder - Oto A low-level library to play sound on multiple platforms
io.Reader
とio.Writer
のAPI用意したのでio.Coopy
でMP3データがコピーできる。- ひたすらCの関数ひとつひとつずつGoに書き直した。
- テストは耳でテストした。デグレしたら
git bisect
五感でテストというパワーワードがタイムラインに舞っていた。
git bisectは初めて知ったので、後で調べる。別の方の記事だが参考
git bisect で問題箇所を特定する
最強のDatastoreライブラリを作った(vvakame)
https://speakerdeck.com/vvakame/golang-dot-tokyo-number-11
- Datastore。Googleのfull managed scalable DB
- https://cloud.google.com/datastore/?hl=ja
- AppEngine Datastore, Cloud DatastoreのAPIが異なってたり、
context
もらえないことがあったり、struct
に特定の型しか使えなかったり、
- なので作った
- 技術書展の公式Webのバックエンドで動いている。サークル一覧APIとかRPCめっちゃ少なくなった。
- 事例がほしい。使い方とかはgcpugのSlack(
#g-cloud-datastore_ja
)とかで問い合わせてくれれば教える!
まずDatastore(GCP)から勉強しないといけないなーと思った。やっぱりGoやってるしGAE使ってみないとだ。
Goで地図サーバを構築した話(tsukumaru)
https://speakerdeck.com/tsukumaru/godedi-tu-sabawogou-zhu-sitahua
- OpenMapTilesが元データ。地図のタイルデータを入手できる
- go-staticmaps。タイルデータにマーカーなどを立てたあとの画像を作れる。 https://github.com/flopp/go-staticmaps
- go-staticmapsはコマンドラインからも使えて便利。
出力画像とかはご本人のqiita記事みるとよい。
OpenMapTilesとgo-staticmaps
Alfred Workflows by Go(仮)(enta)
https://speakerdeck.com/endotakuya/alfred-workflows-by-go
- MacのAlfred。workflowを自作できる。
- Goで作れる。
- 既存のライブラリが微妙だったので自作した。
Alfredでアプリ起動しかしていないので自作ワークフローが作れたり、Sleep Displayとか出来るの初めて知った。。。!
感想
LTオンリーだったが濃い内容ばかりだった。
自分はGo
少しかじっているだけで「開発」に使ったことがないので、自分でサービスやツールを作ってみて「何か」と連携させたり適用させてみないとスキルアップできないなーと思った。
来年の課題である。いや来年と言わず今すぐやるべき課題である。年末に参加できてよかった。