Go lang入門2015-12-11社内勉強会Tsuyoshi Nakamura
View Slide
動くデモまで出来れば良かったのですが、すいません間に合いませんでした。
アジェンダ• Go langって?• 開発環境まわり• 今までのphp,java等のオブジェクト志向言語との違い• まとめ
Go言語って?• 登場時期:2009年• Googleが開発• 静的型付言語 今まで多く使ってきたLL言語とはちょっと違う 「コンパイルが必要 → javaをイメージ → 遅い」とはならない。らしい コンパイルされる為、凡ミス的なsyntax errorとかは心配ない LLライクなC• ググる場合は 「go lang」とlangをつけないとヒットしない(個人的に一番重要)
開発周り• /usr/local/goに最新のgoをダウンロードして解凍。.bashrcを設定で終わりexport GOPATH=~/.goexport PATH=$PATH:/usr/local/go/bin• エディタ:fatih/vim-go(オールインワンプラグイン)あれば良い感じがするvimのパッケージ管理(neobundle)経由で「NeoBundle ‘fatih/vim-go’」で速攻入る それ以外に使っているプラグインは 「scrooloose/syntastic」シンタックスチェック 「ervandew/supertab」tabでコード補完• IntelliJ周りは知らん• 標準でテストライブラリがgo言語にはあるけど「assertequals」使えないので (https://github.com/stretchr/testify)使おうと思ってるけど試してない ※吉田さん教えてくれた• 対話式の確認したい時(https://github.com/motemen/gore)。REPL ※吉田さん教えてくれた コードの変更、保存をトリガーにホットデプロイのリロードしてくれるプラグインも あるらしいので、合わせて検討中
オブジェクト志向言語との違い• 継承して拡張して使っていくという考えがない ややこしいけど、「合成・埋め込み」という考えがあり、それが代替になるっぽい 親クラスからまるっとメソッド等をもらって、独自に拡張するのでなく 再利用可能な部品を作り、必要に応じて合成して使うイメージ• 例外処置として「panic()」「recover()」とかあるけどtry〜catchとは何か違う。 まだ慣れてない。。。• 略が多い。「var aaa int = 10」 = 「aaa := 10」• ハードタブ• 関数の{} 位置が決まってる• ポインタ、並列処理、マップ、スライス、構造体、インターフェイス等々。。。
まとめ• 基本的なことはなんとなく理解できた。結構違う部分が多い気がする いろいろとはまりどこりいっぱいありそう• フレームワーク、ORM、テストあたりを触ってみる