Skip to content

Instantly share code, notes, and snippets.

@goldeneggg
Last active August 29, 2015 14:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save goldeneggg/570ec3b99d5f689a61d3 to your computer and use it in GitHub Desktop.
Save goldeneggg/570ec3b99d5f689a61d3 to your computer and use it in GitHub Desktop.
gocon 2015 summer のメモ

gocon2015s

https://github.com/GoCon/GoCon/blob/master/2015summer.rst

Prepare

  • rakyll/boom (ベンチマークツール) のコード読み
  • mholt/caddy (HTTP2サーバ) のコード読み
  • yhat/scrape (超シンプルwebスクレイパ) のコード読み
  • golang.org/x/ パッケージの最近の状況把握

Keynote

  • 直接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 ???
  • 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
  • go oracle on vim のデモ
    • :GoCallerで呼び出し元へジャンプできる

keyword

  • gb
  • go oracle
  • gomobile

@deeeet さんの

  • cloud foundryはgoで書き直されてる at rakuten
  • tcnksm/gcli - cli-initの書き直し版

keyword

  • mithchelh/cli
  • README, Usage
  • 「UNIXという考え方」

@monochromeganeさんの

  • generative programming
    • argen - activerecord generator
  • アイデアの起点は clipperhouse/gen

keyword

  • clipperhouse/gen
  • go generate

@vvakameさんの

  • jsonのタグ部分を手書きとか正気ではない
    • jwg ってのを作った
  • jwgを使ってください、ではなく、jwgっぽいコード生成系ツールを作って皆に共有しよう、という事が言いたい
  • コード解析正規表現で頑張るの辛い
    • ASTで頑張る
    • ASTは型情報が取れないパターンがちょくちょくある

keyword

  • favclip/jwg
  • go generate
  • AST

@motemenさんの

  • 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は内部はサーバクライアント型になってて、サーバに喋りかけると内容が返ってくるという仕組み

keyword

  • gore
  • AST

@kaneshinさんの

  • go debugの話
  • https://golang.org/doc/gdb
  • go build-gcflagsとか-ldflagsとかオプション付加してbuild
  • gdb go実行ファイルでgdbが動く
  • gdbでもがいた話
    • DWARFが壊れてる
      • gdb使うなら絶対にgo1.4以上を使え
    • 古いgdbがmacに入ってた
    • runtime bug
    • pearsで使ってるRevelでうまくデバッグできなかった

keyword

  • print debug
  • gdb

Gabriel Aszalosさんの

  • "Sourcegraph is a code search, review, analysis tool"
    • https://sourcegraph.com
    • 型とか変数にマウスオーバーしたらgodocコメントとか使用箇所ハイライトされて、なんかすごい便利そう
  • client API ライブラリも提供されている
    • HTTP or gRPC

keyword

  • go generate
  • AST
  • protobuf
  • gRPC

@ikawahaさんの話

  • kagome, pure go な形態素解析器
  • go getしたらすぐに使える形態素解析器
    • 辞書も一緒に落として使える状態にしたい
  • 力技で1313×313の2次元行列にバイナリデータ(int配列)書いたら一応動いたけど、ビルドに15-30分かかるし、実行ファイル100mbぐらいになるし、何かアレ
    • go-bindata使うようにした
    • ソースコードにバイナリデータを埋め込む
  • nomemcopy というオプション
    • stringをbyteの配列にすげ替えて、メモリ使用の効率化

keyword

  • go-bindata

@cubicdaiyaさんの話

  • 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 良い感じのライブラリ教えて欲しい

keyword

  • goroutine, channel
  • golang-stats-api-handler

たけいひでゆきさんの話

  • Goと電子工作とロボット
  • eagle - コマーシャル・ユースでなければ自由に使えるプリント基板設計ソフトウェア
  • Shapeways - 3Dプリントサービス
  • Gobot - Goでロボット

keyword

  • protocol buffer
  • gobot
  • nanopb
  • gRPC

@catatsuyさんの話

  • pixivの話, Goで広告配信サーバ
  • リクエストは直接Goで受けずNginxで受ける
    • Goでtcpをlistenして起動したサーバに対してproxy_passすると遅かった
    • パケットサイズが小さいのでtcpの3 way handshakeのコストが高かった
  • Python製のプロセス管理ツール - Circus
    • 自身でソケットファイルを持つツール(アプリは持たない) = アプリ再起動(例えばgoだと一旦processを終了させるとか)をせずにhot deployが可能になる
  • go buildの際にgitのリビジョン情報を含めるようにして、どのバージョンの実行ファイルが動いてるか確認できるようにする
  • CPU throttling

keyword

  • Circus
  • golang-stats-api-handler
  • net/http/pprof

サイバーエージェントnishioさんの話

  • realtime messaging platform
    • グループ化されたクライアント間のメッセージの大量高速処理
  • League of Legends級の処理をさばけるようになりたい
  • Why Go?
    • コードの読みやすさ = 基盤 というチームでは特に大事(めっちゃわかる。。)
    • レビューや相互理解が容易
    • フォーマットやコード規定が明確
    • Tour of GoとEffective Goを1週間ほどでこなしたらとりあえず書けるようになる
  • テストは標準のtestingパッケージだけ使って書いてる(テストについて良い再考機会になってる)
  • パッケージ構成で悩む
    • 切り口は
      • レイヤー
      • 機能
      • 抽象/実装
  • reflect使うとパフォーマンス落ちるのは致命的
  • 今後のCAでのGo
    • web front server
    • 共通基盤部をmicroservice architecture化してGo導入

keyword

  • net/http/pprof
  • reflect

want to do

  • 例えば「APIとそのクライアントライブラリ」というアーキテクチャのシステム構成で、
    • API(サーバ側)のコードを元に、クライアントライブラリを 自動生成 する
    • というのを、ASTやgo generateを使って行う仕組み
    • 他言語(rubyとか)だとこういう仕組み作りたいときどうするんだろう?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment