Go
カンファレンス・勉強会メモ
More than 3 years have passed since last update.


Official


Generative programming in Go. - monochromegane


Debugging Go Code with GDB - kaneshin


Gore: A Tale of Go REPL - motemen


Go言語でコマンドラインツールをつくるときに僕の語ること - deeeet


自己完結型の形態素解析器をgoで作った話 - ikawaha


Gaurun〜A general push notification server in Go〜 - cubicdaiya


  • slide


  • GourunとはGo製push通知基盤システム

  • 以前はプッシュ通知はジョブキュー(Q4M+PHP)

  • 現在はNginx + Gourun(APIベース、JSON)

  • チャネルのサイズを静的固定(チャネル数超えるとブロック)

  • 監視はZabbix。API(stat/go、stat/app)でメモリ、GC、 ゴルーチン数、チャネル数を取得する。

  • ゴルーチンがメモリリークしたり、チャネルのブロッキングしたりするので、監視して注意する。外部ライブラリが悪さをしていたので、そのライブラリをforkして直して使っている。


  • golang-stats-api-handlerそのまま出力している。


Goと電子工作とロボット - たけいひでゆき


ピクシブ社内広告サーバーでのGoの開発・運用 - catatsuy


  • slide

  • Go製広告サーバーの紹介

  • Nginx -> Circus -> App(Go) -> fluentd -> Admin(MySQL)

  • キャッシュ機構やコネクションの保持とか考える事が減るのでNginxで受ける。

  • GoでTCPをlistenして起動したサーバーに対してproxy_passすると遅かったので、Unixドメインソケットで受けたかった。

  • Circus


    • Python製のプロセス管理ツール。Circus自体がソケットファイルを持って、アプリケーションはファイルディスクリプタをlistenさせて起動してくれる。



  • UNIXドメインソケット


    • 同一マシンなら親子関係がなくても可能なプロセス間通信。

    • memcachedにも利用している



  • profiling



  • testing.B


  • golang-stats-api-handler -> muninで可視化。

  • nginxから社内から見れないように

  • Goプロセス監視はCircus、Nagios。

  • stopwatch

  • もっと速く・・・


    • CPU throttling (最大周波数で動くように)。/etc/default/cpifrequtils を編集。広告サーバーとDBサーバーでは有効だった。



  • Goのログ


    • 標準出力してCircusに任せていたが、ピーク時にCircusが負荷がかかるので、ログローテートを自前で実装した。(USR1受け取ったら新しくファイルを開いて、pidファイルを作る)




GOで基盤システムつくってる話 - サイバーエージェント 西尾様


  • slide

  • ソシャゲのRealtime Messaging Platformで何故Goを採用したかの話

  • コード


    • 読みやすい

    • 機能/担当者間のレビューや相互理解が容易

    • フォーマットやコード規定が明確



  • 学習コスト


    • A Tour of Go

    • Effective Go

    • 60-70%は自習でなんとかなる

    • 30%がGOらしく書く事



  • 開発環境がgomt,golint,go toolvet,godocとか標準で豊富

  • デプロイが楽

  • テストが楽

  • ベンチマークが楽

  • プロファイルが楽

  • パッケージ管理に求める事


    • versioningが必須

    • vendoringは?



  • パッケージ管理の選択技



  • パーケージ構成


    • レイヤー、機能でパッケージを分離

    • ルートパッケージから2階層以内



  • Goぽいコードを近づける為に


    • まずは標準パーケージ見る



  • ライブラリやフレームワークの選定

  • genericsないのどうしてる?


    • interface + type check{}

    • reflect使わない




LT


AppEngine for Go Unittest - sinmetal

slide


pp and reflect - k0kubun

slide


Goのパッケージ構成で試行錯誤してみた話 - fkm

slide


Go製の拡張可能なslackbot - kyokomi

slide