参加者は主催の +Takashi Yokoyama さん、+Takanobu Hagino さん、+Hideki Matsuda さん、私の4名でした。
前半:presentコマンドの紹介&解説
presentスライド(?)は「Go Talks site」などでよく見かけていて「どうやって作られているのか?」と興味を持っていましたが調べるまでには至っていませんでしたので、助かりました。
解説内容を実際にスライドにしてApp Engine上にデプロイしてプレゼンして下さったおかげで、解説と見た目を同時に確認することができて、非常にわかりやすかったです。
presentに関する流れは、以下の通り。
1. presentコマンドをインストール
2. $GOPATH配下にて、スライド内容をmarkdown風に記述して.slideファイルで保存
3. $GOPATH/bin/presentコマンドを実行
→$GOPATH配下の.slideファイルが収集されたhttpサーバーが3999ポートで起動
→$GOPATH配下の.slideファイルが収集されたhttpサーバーが3999ポートで起動
$ $GOPATH/bin/present
... Open your web browser and visit http://127.0.0.1:3999/
... Open your web browser and visit http://127.0.0.1:3999/
4. WWWブラウザーにて「http://127.0.0.1:3999/」にアクセスしてスライドを選択。
今度Goで何か発表する機会があれば、presentでスライドを作成してみようと思います。
# presentスライドだと、Gopherっぽさ(?)が増しますよね!? q@w@p
後半:dockerのソースリーディング - 「バージョンを表示する」処理
server/server.goのInitServerメソッドに処理名と処理の対応マップがあり、その値はjobに設定されています。バージョンを表示する処理はsrv.DockerVersionメソッドです。
for name, handler := range map[string]engine.Handler{
...
"version": srv.DockerVersion,
...
DockerVersionメソッド内では、engineが所有しているengine/env.goのEnv配列に各種バージョン情報を設定しています。
Dockerのバージョン:"Version", "ApiVersion", "GitCommit", "KernelVersion"
Go関連のバージョン:"GoVersion", "Os", "Arch"
APIサーバー側の処理としては、api/server/server.goのcreateRouter関数にパスと処理の対応マップがあり、バージョンを表示する処理はgetVersion関数です。
m := map[string]map[string]HttpApiFunc{
"GET": {
"/events": getEvents,
"/info": getInfo,
"/version": getVersion,
...
getVersion関数内では、eng.ServeHTTP(w, r)の結果をapplication/jsonで返すようになっており、ServeHTTPメソッドはengine/http.goに実装されています。
ServeHTTPメソッド内では、Engineレシーバーのjobに対して、パス名をjob名として実行しているので、恐らくInitServerメソッド内で定義された"version"処理が実行されていると思われます。
次回:Go Concurrency Patterns: Pipelines and cancellation
このままだとGoではなくDockerをソースから学ぶ会になりそうだということで、Dockerのソースリーディングを一旦中断して、次回は、以前から気になっていた「Go Concurrency Patterns: Pipelines and cancellation - The Go Blog」を読み進めることになるようです。
0 件のコメント:
コメントを投稿