GoCon 2015 summerを見てきました #gocon
2015-06-21のgocon 2015 summerを見てきました。
遠方からいらっしゃっていた @kwmt27 さんや @qt_luigi さんに会えたり、 @vvakame さんにTypeScriptについていろいろ聞いたり、その他皆様ありがとうございました!
次回も楽しみにしています!
以下、簡単なものですが、メモを公開します。
- 募集: http://gocon.connpass.com/event/14063/
- 詳細: https://github.com/GoCon/GoCon/blob/master/2015summer.rst
- togetter: http://togetter.com/li/837367
Keynote by @francesc at Google
It's an exciting time to be a gopher
Go 1.5 won't have a single line of C
Go in Go:
- don't like C
- love writing Go
- a more maintenable code base
- more mind space left for innovation (no context switch)
Program analysis:
- dynamic analysis
- debbuging
- code cover
- static analysis
- gofmt, golint, go vet
SSA (Single Static Assignment):
- Data flow analysis easier
- SSA Backend plan for go1.6
- source code analysis tool
- pointer analysis
- analysis: satatic function call or dynamic function call
- call stack
- godoc -analysis
Mobile:
- gomobile
- demo https://github.com/crawshaw/balloon
- debug on PC, run on Android!
総括: Goで開発ベースは全部整うし、モバイルもこれから書けるし、Goでいいやん。
"What I Talk About When I Talk About CLI Tool By Golang" by @deeeet at rakuten
https://speakerdeck.com/tcnksm/what-i-talk-about-when-i-talk-about-cli-tool-by-golang-number-gocon
Cloud foundry : Goで書き直し中
Command line toolつくるときに使えるライブラリ:
感想:
flagパッケージでほとんど事足りる、が、必要に応じてライブラリ使うほうがいいかも。
"Generative Programming in Go" by @monochromegane at GMO Pepabo
https://speakerdeck.com/monochromegane/generative-programming-in-go
generate programming
- Go + AST + Template + goimports = Code
- argen: https://github.com/monochromegane/argen
- reflectを使うと性能が落ちる -> 使わないようにする
templateは可読性重視。goimportsで自動整形する:
func writeWithFormat(file, template string, structs structs) ([]byte, error) { var b bytes.Buffer w := bufio.NewWriter(&b) write(w, template, structs) w.Flush() formatted, err := imports.Process(file, b.Bytes(), nil) if err != nil { return nil, err } return formatted, nil } func write(w io.Writer, tplText string, structs structs) error { t := template.New("t") t.Funcs(template.FuncMap{}) tpl := template.Must(t.Parse(tplText)) if err := tpl.Execute(w, structs); err != nil { return err } return nil }
感想:
ASTでGoのコードを解析してコードを生成するというのは、それなりにメンテナンスコストもかかるので、細かい所を除いた8割くらいにおさえていた方がいい、というのがこれまでの経験で思う所。 goimportsの処理をコードから呼ぶことで整形するのは良いかもしれないので今度実装したい。
"GoCon 2015 Summer GoのASTをいじくって新しいツールを作る" by @vvakame at TopGate
http://www.slideshare.net/vvakame/gocon-2015-summer
TypeScript and Go の人
- https://github.com/favclip/jwg
- Goのstructのjsonタグを自動生成
- GoのAST便利
"Gore: A Tale of Go REPL" by @motemen at hatena
https://speakerdeck.com/motemen/gore-a-tale-of-go-repl
Gore: https://github.com/motemen/gore
- REPL
- Goを試したいときにirbみたいにやりたい
- しくみ: 中でgo runしてる
- コードをastで解析して各行をラップしてmainで実行する
"Debugging Go Code with GDB" by @kaneshin at eureka
https://speakerdeck.com/kaneshin/debugging-go-code-with-gdb
サービスをGoで書き換え中。
デバッグ:
- printデバッグやめろ
- gdbでデバッグしよう
- requre go1.4+
- OSX: brew install homebrew/dupes/gdb
go build -gcflags "-N -l"
- GoのGDB対応は発展途上
- コンパイル速いし → printデバッグでもいいか。
感想:
GoでGDBは何度か試みたことがある、が、うまく動くことが少なかったので諦めていた。 go1.4+で解消されているのであればまたチャレンジしてみようかな。
"Scaling Sourcegraph with Go" by Gabriel Aszalos(@gabrielaszalos) at Sourcegraph
https://sourcegraph.com/ https://srclib.org/
- ソースコード解析
- go-sourcegraph API
- https://sourcegraph.com/github.com/golang/go@ac452349e4f40c30d50f9922bf2c4592e748ce5e/.tree/src/encoding/json/decode.go
- gRPCでサービスを分割 https://github.com/grpc/grpc
感想:
ソースコードの解析サービスがWebブラウザで手軽に閲覧できるのはうれしい。 gRPCをもう取り込んでい活用していてすごい。 いろんなノウハウが溜まっていそう。
ikawaha at パシフィックポーター
形態素解析 kagomme
https://github.com/ikawaha/kagome
go gettableを目指す
- go-bindata でバイナリのassetを。 https://github.com/jteeuwen/go-bindata
- nomemcopy : use reflect/unsafe
感想:
形態素解析の話からはじまってどこへ向かうのかとおもったら、go getで簡単に取れるようにするための工夫がいろいろあった。 go-bindataつかったことないので困ったら活用しよう。
cubicdaiya at Mercari
https://speakerdeck.com/cubicdaiya/a-general-push-notification-server-in-go
nginxの人
- goroutineのリークには気をつける
- https://github.com/fukata/golang-stats-api-handler
"Golang, make and robotics" by @HideyukiTakei at beatrobo
https://speakerdeck.com/hideyuki/golang-make-and-robotics-number-gocon
Go in Robot
- http://gobot.io/
- Arudino Firmata : http://firmata.org/wiki/Main_Page
- gRPCクライアント -> gRPCを通じてシリアル通信 -> AVR
- プロトコルバッファprotocを使う。IDLで定義したものをコンパイル
感想:
ロボット動いてた。 IDLなんだかんだで使ったことない。試さないと。
"広告サーバーでのGoの開発・運用" by @catatsuy at ビクシブ
https://speakerdeck.com/catatsuy/p-ads-server-gocon2015
インフラまわり 広告サーバをGoで作っている
- nginx → Circus → Application(golang)
- nginxでユーザーのリクエストをバッファリングする
- アクセス制御も簡単
- nginx <-unix domain socket-> Circus <-file descriptor-> go
- Circus http://circus.readthedocs.org/en/latest/
- Goのアプリをデプロイ後、circusctl reloadするだけ
感想:
nginx <--> Circus <--> Go の組合せでの運用は良さ気。 GoでCircusのような実装ってないのかな?
nishio ryota サイバーエージェント
サーバーサイド
- 基盤はJavaの開発が長い
- Goのメリット: 並行性、わかりやすさ、速度
- コード: 読みやすい、フォーマット・コード規約が明確
- 学習コスト: A Tour of Go、Effective Goで基本的(6割)に書けるようになる。Goらしく書くにはその先
- 開発環境: 充実 gfmt, golint, go vet etc..
- デプロイ: クロスコンパイル簡単。
- テスト: 標準で。 go test
- ベンチマーク: 簡単。 go bench, go tool benchcmp
- プロファイル: 標準。 runtime/pprof, net/http/pprof
- パッケージ管理: まだこれから
- Goっぽさ: 標準パッケージで学ぶ。
感想:
人出が足りてないという割にはちゃんと使いこなせていてすごい。 Goの勉強会を開催するらしいので遊びに行ってみたい。
その他
じゃんけん大会でgopherげっとしましたー!ありがとうございます #gocon pic.twitter.com/IzAnua2vvR
— atotto (@atotto) 2015, 6月 21
2歳になった息子にgopher見せたら「いらない!」って言われた。ので、無事に明日、共に会社に出社します。
— atotto (@atotto) June 21, 2015
去年、Denverのgopherconでもらったピンクのgopherと並んで記念写真。 pic.twitter.com/IQ6jmeXQG4
— atotto (@atotto) June 21, 2015