My External Storage

Dec 12, 2017 - 8 minute read - Comments - report go

[Go]golang.tokyo #11 参加メモ #golangtokyo

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)

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つのアプローチ
  • 1. mainにかく
    • オブジェクトが増えるたびにmainが肥大化してしまう
  • 2. DIコンテナを使う。たとえばgoldiを使う。
    • DIコンテナのDSL覚えないといけない。
  • 3. 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

カンマ忘れとか良くするので、gofmtrlxよさそう。reviewdog使おうと思って使えてないから、今年中に自分のリポジトリに設定しておきたい。

GoでJavaのライブラリを使う(juntaki)

https://speakerdeck.com/juntaki/gokarajavafalseraiburariwoshi-u-number-golangtokyo

  • 「ScalaやKotlinをJVMの既存資産を使えるって?それGoでも出来るよ!」って言いたくてjnigojavagoを作った。
  • 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)

多すぎて5分では全部紹介しきれていなかった。業務で書く→OSSで公開する。こういうサイクルってエンジニアとしてのスキルアップに重要なんだろうなと常々思っている。

Machine Learning with Go を読んで(ysaito)

https://speakerdeck.com/ysaito8015/machine-learning-with-gowodu-nde

英語のMeetupも主催されているとのこと。 https://www.meetup.com/ja-JP/Tokyo-Gopher-Hub/

機械学習、教養レベルだけでも覚えておくべきなんだろうけどなかなか手が出せていないのでこういう自分の好きなことからつながっている入り口があるのは嬉しい。

MP3 デコーダを C から移植した話(星一)

https://docs.google.com/presentation/d/e/2PACX-1vTTXf-LWNRvMVGQ7GI4Wh8EKohot_9CMtlF4dswpYGpuYKOek5NeNP-_QZnNcRFZp9Cwm0pCcykjqDN/pub?start=false&loop=false&delayms=3000&slide=id.p

  • go-mp3 io.Readerが使えるCから移植したMP3 Decoder
  • Oto A low-level library to play sound on multiple platforms
  • io.Readerio.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(GCP)から勉強しないといけないなーと思った。やっぱりGoやってるしGAE使ってみないとだ。

Goで地図サーバを構築した話(tsukumaru)

https://speakerdeck.com/tsukumaru/godedi-tu-sabawogou-zhu-sitahua

出力画像とかはご本人のqiita記事みるとよい。
OpenMapTilesとgo-staticmaps

Alfred Workflows by Go(仮)(enta)

https://speakerdeck.com/endotakuya/alfred-workflows-by-go

Alfredでアプリ起動しかしていないので自作ワークフローが作れたり、Sleep Displayとか出来るの初めて知った。。。!

感想

LTオンリーだったが濃い内容ばかりだった。
自分はGo少しかじっているだけで「開発」に使ったことがないので、自分でサービスやツールを作ってみて「何か」と連携させたり適用させてみないとスキルアップできないなーと思った。
来年の課題である。いや来年と言わず今すぐやるべき課題である。年末に参加できてよかった。

関連記事