関数型・オブジェクト指向宗教戦争に疲れたなたに送るgo言語入門
TRANSCRIPT
関数型・オブジェクト指向宗教戦争に疲れたあなたに送る
Go言語のススメ
石坂忠広
http://opcdiary.net
自己紹介
• プロフィールは適当にWindows GitとかVisual Studio Gitで検索してください。トップに出てきません。
•富士山の方から来ました。
• オブジェクト指向スキーなSEです。
•純粋関数型なんてわかりませんと思っていたら、純粋関数型の人もあんまりわかってなかったみたいな感じで何なんだったんだこの一ヶ月みたいな感じです。ま、傍観者ですが。
• ま、あと、オブジェクト指向も流派が分かれるので一緒にするな。
疲れました。。。
•総称性の議論とか
• クラス、オブジェクト、そもそもJavaScriptのあれはとか
•副作用?副作用?
•圏論?はぁ?それがお前の言う圏論の議論なの?
•別に関数型とオブジェクト指向とか相反しないし• OCamlとF#に謝れとか
• まぁ、原理主義者相手にしてると疲れますよね
そんな疲れたアナタに朗報です
Go言語でリフレッシュしましょう!
Go言語には議論を呼ぶ以下のものがありません
•クラス、オブジェクト、継承、オーバーライド
• Generics(総称性)構文
•関数型原理主義者の嫌う、擬似関数型現機能、ラムダ式
• While/Do While/Foreach
•モナド?圏論?とか面倒くさいこと言う厨二
争いの起きる余地なし!!
Go言語の特徴• 手続き型の高級言語
• ロブ・パイク、ケン・トンプソンが開発に関わっている
• ALGOL, Pascal, Cのような構文
• コンパイル言語• クロスコンパイルが得意(Linux/Darwin(Mac)/BSD/Solaris/Windows/Plan 9)• 実行動作ランタイムなどない!
• メモリ管理はGCに一任
• 連想配列を持つ
• 型の継承、ジェネリックプログラミング、アサーション、オーバーロードといった機能は無いが、インターフェイスによるポリモーフィズムはある(それなんてVB)
• 並行動作の支援機能
Hello World
package main
import "fmt“
func main() {fmt.Printf("Hello, World¥n")
}
;(セミコロン)がない!!!
•中括弧言語のくせにセミコロンがない!
•無いのではなく、コンパイラが構文解釈して適宜挿入するので省略できている。(文末解析出れば人が入れること無いじゃん)
•以下のような場合は必要。• for i := 0; i < 10; i++ {} (for文のイニシャライザ)
• 1行に複数の文を記述したい場合
;以外もC/C#/Java違うところが多いよ
•代入演算子が :=
• for, if にカッコを付けない
•変数の型指定が変数の後• var n int
• var err os.Error
• Asはいらない
• while / do whileが無い。ロブ・パイク大先生もforで十分だと。
• ポインタがある。
• C++プログラマ向けGo講座を見よ
ま、ゆるふわな言語です。
実践Go言語Go言語を勉強したくなったらこのサイトを見よう
はじめかた
• http://golang-jp.org/から始めましょう• ここのトップページのDownload Goをクリック
• Linux/BSD/OS X/WindowsはこれでOK
• リンク先ページ書きの注意書きを読みましょう
• Solarisの人はパッケージがあるはず
• チュートリアル• A Tour of Goでひと通りの構文を学習できます。
• WEBで完結しているので何かをインストールする必要なし
• http://go-tour-jp.appspot.com/#1
開発環境• CLI主義
• コンソールウインドウを黒い画面とか言うゆとりはPHPでも使ってろ!!
• コード整形• コンパイラがその機能を内蔵 go fmt <ソースコードファイル>
• 複数のコーディングスタイルとか許してやんない→議論の余地なし
• エディタ• Vim, Emacs, Atom等でGo用に構文のハイライトや、コード整形、コード補完の機能を提供するプラグインがあるよ
• IDE• LiteIDEが優秀
• InteliJ IDEAもがんばっているっぽい
何に向いているか?
• Goole App Engine(GAE)でのアプリケーション展開
• WEBアプリケーション
• UNIXwayなコマンドラインツール、且つクロス環境で動作して欲しい場合• クロスコンパイル機能が非常に優秀で、実行ファイルがあればライブラリのポートとかも必要ない。Linux上でMac用、Windows用のバイナリも作成可
• 個人的におすすめ
• GUIはあんまり得意じゃない
お前じゃない
ご清聴ありがとございました。