Upgrade to Pro — share decks privately, control downloads, hide ads and more …

KC3 2014 懇親会LT 「Let It ʕ ◔π◔ʔGo」

Yuto Tokunaga
September 13, 2014

KC3 2014 懇親会LT 「Let It ʕ ◔π◔ʔGo」

5分を大幅に超過したLTの資料です.ご確認ください.

Yuto Tokunaga

September 13, 2014
Tweet

More Decks by Yuto Tokunaga

Other Decks in Programming

Transcript

  1. Golangとは Go is an open source programming language that makes

    it easy to build simple, reliable, and efficient software. http://golang.org/ より引用 日本語でおk Goはプログラミング言語のひとつ。グーグ ル社によって開発されており、 (略) 主な特 徴として、軽量スレッディングのための機 能、Pythonのような 動的型付き言語のよう なプログラミングの容易性、などがある。 日本語版Wikipedia Go (プログラミング言語) より引 用 4 / 28
  2. Golangとは 特徴 静的型付け言語 超☆強力な型推論 シンプルな文法 ガベージコレクション装備 マルチスレッドの処理が容易に行える リフレクションができる コンパイルしてネイティブバイナリを吐く(VMは使わ ない)

    ネイティブバイナリのポータビリティが高い クロスコンパイルが容易 コンパイル・実行が速い ─=≡Σ((( つ•̀ ω•́ )つ パッケージ管理システムとコンパイラが密に連携して いる コーディング規則が厳密に定められている オープンソース 楽しい
  3. コード例 Hello World 定番のアレ package main import "fmt" func main()

    { fmt.Println("Hello!! きんいろモザイク") } 9 / 28
  4. コード例 Hello World 定番のアレ package main import "fmt" func main()

    { fmt.Println("Hello!! きんいろモザイク") } Hello!! きんいろモザイク 10 / 28
  5. コード例 Hello World 定番のアレ package main import "fmt" func main()

    { fmt.Println("Hello!! きんいろモザイク") } Hello!! きんいろモザイク print("Hello!! きんいろモザイク") 11 / 28
  6. FizzBuzz package main import "fmt" func main() { for i

    := 1; i <= 15; i++ { switch { case i%15 == 0: fmt.Println("きんぱつ!") case i%3 == 0: fmt.Println("きん!") case i%5 == 0: fmt.Println("ぱつ!") default: fmt.Println(i) } } } Goでは, switch 文をif else 連鎖の代わりに使うことができる. 又,== をサポートする 12 / 28
  7. No.4 コードフォーマッティングツール Goには標準でコードのフォーマット(インデントや空白の調整)をするツールが付い ている .エディタで保存時にそのツールを利用するように設定しておくのが定番 (Vim, Sublime Textではプラグインの追加でできる).:w (ViMの保存コマンド)をッター ンすると

    クソコードも綺麗に見える コードが綺麗に修正されます. プログラマの表現の自由度が低くなるという考えや,そんなことどうでもいいだろと 思わ れるかもしれないが,自転車置き場の議論(つまらない議論に時間を割いてしま うこと) を避けられる. また,コンパイラの構文解析の仕組みにより,標準のフォーマットに従わないと コン パイルに失敗するようになっている. 15 / 28
  8. for-range pow := []int{1, 2, 4, 8, 16, 32, 64,

    128} for i, v := range pow { fmt.Printf("2**%d = %d\n", i, v) } pow = [1, 2, 4, 8, 16, 32, 64, 128] for i in range(len(pow)): print("2**%d = %d\n" % (i, pow[i])) Goの range はインデックスと内容の両方が取れる 17 / 28
  9. No.2 型推論と変数宣言 var x int = 3 // 型を指定 var

    y = "Yo" // 型を省略すると推論される.この場合はstringになる z := false // :=を使うとvarさえも省略できる a, b := "hoge", "fuga" // 複数同時に宣言 f := func(i int) int { return i * i } // 関数を変数に格納できる f(x) x = 3 y = "Yo" z = False a, b = "hoge", "fuga" f = lambda i: i * i f(x) Goでは, : の有無で変数の宣言と代入を見分けることができる. 18 / 28
  10. Revel Revelの特徴 Hot Code Reload (後で紹介します) Comprehensive (総合的な (Google翻訳より)) routing

    parameter parsing validation session/flash templating caching job running a testing framework internationalization High Performance (Railsの3-10倍とか書いてある) 22 / 28
  11. Revelで作ってみる go get github.com/revel/cmd # フレームワーク本体とコマンドツールをインストール revel new myapp #

    アプリ新規作成 revel run myapp # サーバーを起動,アプリを立ち上げる 23 / 28
  12. ちょっと変更してみる package controllers import "github.com/revel/revel" type App struct { *revel.Controller

    } func (c App) Index() revel.Result { c.Flash.Success(123) // 引数の型が違う return c.Render() } ブラウザでF5をッターン 25 / 28