6. Agenda
1. Introduction
i. Do you know golang?
ii. Do you know appengine?
iii. Why start appengine with golang?
2. About golang specification
3. Live developing
4. まとめ
7. About golang specification
• まずは言語仕様から軽く・・・
• A Tour of Go
- http://tour.golang.org/
- 実行するコードは、golang.org サーバ上のGo Playgroundで動作
- 受けたGoコードをサーバでコンパイル・リンク・実行し、そして
その結果を返してくれる
• A Tour of Go (jp)
- http://go-tour-jp.appspot.com/
- 今日はここから要所をピックアップすることにします
- 数が多いので巻き気味でいきます
18. About golang specification
#27, 29) Pointers, The new function
• new(T) と書くと、ゼロ初期化した T の値をメモリに割り当て、その
ポインタを返す
- Go にはポインタがある(ポインタ演算はない)
- 構造体のフィールドは、構造体のポインタを通してもアクセスでき
る
19. About golang specification
#30, 31, 32) Slices
• 配列変数は配列全体。スライスとは、ある配列内の連続した領域への参照のこと
• make 関数を使って生成:ゼロ初期化した配列をメモリに割り当て、その参照が
生成される
20. About golang specification
#34, 35) Range
• slice などの要素ひとつずつを反復処理するのに使える
• i はインデックス。その後ろに変数を置くと値が取れる
• インデックスや値の代入先をアンスコ”_”にすることで、
破棄することも可能
21. About golang specification
#37, 38, 39, 40) Maps
• 連想配列。make関数 で作成
• キーが存在するかどうかは、2つ目の戻り値を受け取ることで確認
- map m に key があれば、 ok は true になる
- なかった場合、ok は false になり、 v は、map の要素の型のゼロの値
になる
22. About golang specification
#42, 43) Function
• 関数も値として扱える
- 関数そのものを変数に代入できる
• Go の関数はクロージャだそうです
- クロージャ:関数閉包。引数以外の変数を自身のスコープにおいて解決する関数オブジェクト
- pos, neg の各クロージャは、自身の変数 sum へアクセスして変更できる(「sum にバインド
されている」)
23. About golang specification
#45, 46) Switch
• 上から下に評価。一致したところから下は評価されない
• 各 case の最後で break する
- Java とかだと、case 文を実行した後でも switch 文全体の処理から抜けず
に次の case の判定を行う
- fallthrough 文を case の最後に記述すれば、 Java とかと同じ挙動に
30. About golang specification
#66) Range and Close
• 送り手は、これ以上の送信する値がないことを示すためにチャネル
を close できる
• for i := range c と書けば、チャネルが閉じられるまで、繰り返し
チャネルから値を受信できる