https://github.com/GoCon/GoCon/blob/master/2015summer.rst
- rakyll/boom (ベンチマークツール) のコード読み
- mholt/caddy (HTTP2サーバ) のコード読み
- yhat/scrape (超シンプルwebスクレイパ) のコード読み
- golang.org/x/ パッケージの最近の状況把握
- 直接cのコードを吐くコンパイラ、 go 1.5の話
- 「セミコロンが俺を殺す」
- Dynamic analysis
- debuggers
- profilers
- assertion
- unit test(go test)
- data race detector
- Dynamic analysis のメリット
- staticよりシンプル
- acturallyな問題だけを見つけられる
- Dynamic analysis のデメリット
- 遅くなる
- acturallyな問題だけしか見つけられない
- Static analysis
- フォーマット: gofmt
- ポリシー適用: golint
- validation: govet
- more coming
- Single Static Assignment
- Go Oracle ???
- source analysis tool らしい
- goken/goken10-oracle.md at master · goken/goken https://github.com/goken/goken/blob/master/goken10-oracle/goken10-oracle.md
- oracle expert mode
call(func)
って関数呼び出し記法
- static analysis as a best practice test
- improve your code
- Mobile
- go mobile tool(>= 1.5)
gomobile init
gomobile install
gomobile bind
- mobile demo : github.com/crawshaw/balloon
- There's much more
- for numeric computation
- as an industrial language
- dependency management and vendoring
- dave chancy の
gb
- dave chancy の
- go oracle on vim のデモ
:GoCaller
で呼び出し元へジャンプできる
gb
go oracle
gomobile
- cloud foundryはgoで書き直されてる at rakuten
- tcnksm/gcli - cli-initの書き直し版
- mithchelh/cli
- README, Usage
- 「UNIXという考え方」
- generative programming
- argen - activerecord generator
- アイデアの起点は clipperhouse/gen
- clipperhouse/gen
go generate
- jsonのタグ部分を手書きとか正気ではない
- jwg ってのを作った
- jwgを使ってください、ではなく、jwgっぽいコード生成系ツールを作って皆に共有しよう、という事が言いたい
- コード解析正規表現で頑張るの辛い
- ASTで頑張る
- ASTは型情報が取れないパターンがちょくちょくある
- favclip/jwg
go generate
- AST
- goのrepl
- sbinet/igo
- vito/go-repl
- d4Isk/go-pry
- "Read Eval ??? Loop" ではなく (なんだったっけ)
- ASTで抽象構文器を作って
go run
で実行できる形式のgoファイルを出力するgo/printer
でAST to file
- 出力したファイルに対して
go run
- 式の結果の出力はユーザ環境次第で切り替える
- ppがインストールされてたら使う
- spewが同上
- どっちもなければprintf
_gore_p
関数で実装
s := 0
って書くとdeclared and not usedが出る =>_ = s
を書いて黙らせる- 補完はどうやってるの?
- gocode 使ってる
- gocodeは内部はサーバクライアント型になってて、サーバに喋りかけると内容が返ってくるという仕組み
- gore
- AST
- go debugの話
- https://golang.org/doc/gdb
go build
に-gcflags
とか-ldflags
とかオプション付加してbuildgdb go実行ファイル
でgdbが動く- gdbでもがいた話
- DWARFが壊れてる
- gdb使うなら絶対にgo1.4以上を使え
- 古いgdbがmacに入ってた
- runtime bug
- pearsで使ってるRevelでうまくデバッグできなかった
- DWARFが壊れてる
- print debug
- gdb
- "Sourcegraph is a code search, review, analysis tool"
- https://sourcegraph.com
- 型とか変数にマウスオーバーしたらgodocコメントとか使用箇所ハイライトされて、なんかすごい便利そう
- client API ライブラリも提供されている
- HTTP or gRPC
go generate
- AST
- protobuf
- gRPC
- kagome, pure go な形態素解析器
go get
したらすぐに使える形態素解析器- 辞書も一緒に落として使える状態にしたい
- 力技で1313×313の2次元行列にバイナリデータ(int配列)書いたら一応動いたけど、ビルドに15-30分かかるし、実行ファイル100mbぐらいになるし、何かアレ
- go-bindata使うようにした
- ソースコードにバイナリデータを埋め込む
- nomemcopy というオプション
- stringをbyteの配列にすげ替えて、メモリ使用の効率化
- go-bindata
- gaurun
- (大量の)重い処理をgoroutineでやらせるとパフォーマンスが出ない
- 重い処理=push通知
GET /stat/go
- goの統計情報を返すAPI(を用意してる)- goサーバの何をモニタリングするの?
- メモリアロケーション
- GC頻度
- ゴルーチン数
- チャネル使用量
- goroutineのリーク問題
- 外部ライブラリでgoroutineを起動しっぱなしで終了してないものがある → スタックを食う
- チャネルの数は有限なので、一杯になってblockされる
- fukata/golang-stats-api-handler
- go製サーバのモニタリング用ツール
- go書きやすくて、2日でプロト完成・1週間でproductionレベルにして投入
- goでAPNS 良い感じのライブラリ教えて欲しい
- goroutine, channel
- golang-stats-api-handler
- Goと電子工作とロボット
- eagle - コマーシャル・ユースでなければ自由に使えるプリント基板設計ソフトウェア
- Shapeways - 3Dプリントサービス
Gobot
- Goでロボット
- protocol buffer
- gobot
- nanopb
- gRPC
- pixivの話, Goで広告配信サーバ
- リクエストは直接Goで受けずNginxで受ける
- Goでtcpをlistenして起動したサーバに対してproxy_passすると遅かった
- パケットサイズが小さいのでtcpの3 way handshakeのコストが高かった
- Python製のプロセス管理ツール - Circus
- 自身でソケットファイルを持つツール(アプリは持たない) = アプリ再起動(例えばgoだと一旦processを終了させるとか)をせずにhot deployが可能になる
go build
の際にgitのリビジョン情報を含めるようにして、どのバージョンの実行ファイルが動いてるか確認できるようにする- CPU throttling
- Circus
- golang-stats-api-handler
- net/http/pprof
- realtime messaging platform
- グループ化されたクライアント間のメッセージの大量高速処理
- League of Legends級の処理をさばけるようになりたい
- Why Go?
- コードの読みやすさ = 基盤 というチームでは特に大事(めっちゃわかる。。)
- レビューや相互理解が容易
- フォーマットやコード規定が明確
- Tour of GoとEffective Goを1週間ほどでこなしたらとりあえず書けるようになる
- テストは標準のtestingパッケージだけ使って書いてる(テストについて良い再考機会になってる)
- パッケージ構成で悩む
- 切り口は
- レイヤー
- 機能
- 抽象/実装
- 切り口は
- reflect使うとパフォーマンス落ちるのは致命的
- 今後のCAでのGo
- web front server
- 共通基盤部をmicroservice architecture化してGo導入
- net/http/pprof
- reflect
- 例えば「APIとそのクライアントライブラリ」というアーキテクチャのシステム構成で、
- API(サーバ側)のコードを元に、クライアントライブラリを 自動生成 する
- というのを、ASTやgo generateを使って行う仕組み
- 他言語(rubyとか)だとこういう仕組み作りたいときどうするんだろう?