今日から始めるGopher - スタートGo #0 @GDG名古屋

4,618 views

Published on

0 Comments
11 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,618
On SlideShare
0
From Embeds
0
Number of Embeds
1,996
Actions
Shares
0
Downloads
5
Comments
0
Likes
11
Embeds 0
No embeds

No notes for slide

今日から始めるGopher - スタートGo #0 @GDG名古屋

  1. 1. 今日から始めるGopher2012/10/13(Sat)スタートGo #0@GDG名古屋
  2. 2. 自己紹介上田拓也豊橋技術科学大学大学院電子・情報工学専攻博士後期課程3年twitter : @tenntennblog: http://u.hinoichi.net
  3. 3. 日頃やってる事● 研究 ○ システム科学研究室所属 ○ 複雑系 ○ セルオートマトンを用いたデータ解析 ○ JavaやGo言語でシミュレータを作成● ソフトウェア開発 ○ アルバイト ■ Go言語使ったWebアプリ ○ 研究室 ■ Javascript + d3jsでWebアプリ
  4. 4. アジェンダ● Go言語とは?● なぜGo言語なのか? ○ シンプルな設計と文法 ○ 並列プログラミング ○ 豊富なライブラリ群とgoツール● Go言語を勉強するには? ○ 書籍で勉強する ○ Webで勉強する ○ ML等で情報を得る ○ 英語でいいからタダで読みたい!
  5. 5. Go言語とは?
  6. 6. Go言語とは?● Googleが開発したコンパイラ言語 ○ その他のGoogleが開発した言語 ■ Dart : JSの代替 ■ noop : JavaVMで動く言語(忘却のかなた) ■ Python : 人気の言語● 設計者: Robert Grisemer, Rob Pike, Ken Thompson● 強い型付け● シンプルな設計・文法● 並列プログラミング● マスコットがかわいい
  7. 7. Gopherhttp://golang.org http://dancallahan.info/journal/go-overview/ Gopher Gopher (マスコット) (Go言語ユーザ)
  8. 8. Plan9のうさぎと似てないか? http://www.digit. lk/10_march_foss →デザインした人が同じ!
  9. 9. なぜGo言語なのか?
  10. 10. なぜGo言語なのか?● シンプルな設計/文法 ○ 曖昧さを排除した設計 ○ 型推論 ○ 複数の戻り値 ○ ポインタはあるがポインタ演算はなし ○ ダックタイピング ○ 強い型付け● 並列プログラミング ○ ゴールーチンとチャネル● 豊富なライブラリ群とgoツール ○ goツールは最強 ○ Web系パッケージの豊富さ ○ Google App Engine for go
  11. 11. シンプルな設計/文法-曖昧さを排除した設計-● コンパイラはかなり厳しい(ドS) ○ 明示的なキャスト ○ 暗黙の型変換は行なわない ■ 同じ型同士の演算のみ ○ 使っていないパッケージや変数は許さない● 分かっていることは書く必要なし ○ 文末のセミコロン ○ 型推論 ○ ifやfor, switchの() ○ switchのbreak→コンパイル通ればこっちのもん!
  12. 12. シンプルな設計/文法-型推論-● 値から変数の型を推論する ○ ほとんど型を型名を書く必要がない[Sample]// var 変数名 型名var num intnum = 100// 同じ意味num := 100
  13. 13. シンプルな設計/文法-複数の戻り値-● 関数は複数の戻り値を返せる ○ 計算結果とエラーが同時に返す場合に使える[Sample]// 商と余りを返すq, r := div(100, 3)// 一時変数いらずのスワップa, b = b, a
  14. 14. シンプルな設計/文法-ポインタ-● ポインタはあるが、ポインタ演算はなし ○ unsafeパッケージを使えばできる(ボソ[Sample]// ポインタはあるhoge := 100 // int型ptr := &hoge // *int型// ポインタ演算はできないptr++ 安全ですね!
  15. 15. シンプルな設計/文法-ダックタイピング-● インタフェースの実装は明示的に行なう必要な し ○ implementsなんていらない![Sample]// インタフェースtype Stringer interface { String() string}// 実装type Hoge struct {}func (h *Hoge) String() string {return "hoge"}
  16. 16. シンプルな設計/文法-強い型付け-● 型が違う値同士の計算は明示的なキャストが必 要![Sample]// int, float64n, m := 100, 10.5n + m // エラー// キャストがいるfloat64(n) + m 安全ですね!
  17. 17. 並列プログラミング-ゴールーチン-● 軽量のスレッドに似たゴールーチンというものが ある● 予約語goを付けて関数を呼び出す ○ 別のゴールーチンで動作する[Sample]// 別のゴールーチンでgo something()//すぐにここに来る
  18. 18. 並列プログラミング-チャネル-● ゴールーチンとやり取りするための仕組み ○ ゴールーチンとゴールーチンを繋ぐパイプのようなも の! ○ やり取りする値の型を持つ ○ 安全にやりとりできる![Sample] Godone := make(chan bool)go func() { main true sub for i := 0; i < 1000000; i++{} done <- true // チャネルで送る}()<- done // 終わるまで待つ 安全ですね!
  19. 19. 豊富なライブラリ群とgoツール-Web系パッケージ-● net/http ○ 基本的なWebサーバの機能を提供● text/template, html/template ○ テンプレートエンジン● encoding/json, encoding/xml ○ JSON, xmlのシリアライズ● net/http/fcgi ○ FastCGIをサポート● その他 暗号やハッシュ関数ライブラリ等
  20. 20. 豊富なライブラリ群とgoツール-goツール-● goツール ○ ビルド ■ go build ○ ビルド&実行 ■ go run ○ パッケージ管理 ■ go get, go install [例] go get github.com/tenntenn/goweb-msgpack ○ 単体テスト ■ go test ○ コード整形 ■ gofmt ○ 互換性保持 ■ go fix
  21. 21. 豊富なライブラリ群とgoツール-単体テストパッケージ-● testing ○ 単体テスト用のパッケージ● net/http/httptest ○ Webアプリの単体テスト用パッケージ● go test ○ xxx_test.goという名前のgoファイルを対象に単体テスト を行なうツール● gocov ○ カバレッジツール ■ 現在のバージョンにはオフィシャルにはない
  22. 22. 豊富なライブラリ群とgoツール-Google App Engine for go-● Google App Engineのgo言語版 ○ PythonとJavaとは違い唯一、ネイティブコードになる ○ Python版と比べまだ機能は少ない ○ ゴールーチンは使えるが、並列にならない
  23. 23. Go言語を勉強するには?
  24. 24. 書籍で勉強する 現在日本語の書籍は4冊発売されている New!!http://p.tl/yJeG http://p.tl/5Wnf http://p.tl/suCJ http://p.tl/XBg8 ※この3冊持ってきてますので、試し読みしたい片はどうぞ。
  25. 25. Webで勉強する● golang.org(本家) ○ 情報量が多い! ○ 英語!● golang.jp ○ golang.orgの日本語訳 ○ ちょっと情報が古い(随時更新されてる)● A tour of go ○ チュートリアル! ○ 日本語版もある ○ 後でやります
  26. 26. ML等で情報を得る● go-nuts (Google グループ) ○ オフィシャルなML● golang-jp (Google グループ) ○ 日本語でやりとりするML● go-weekly(Googleグループ) ○ Go言語の最新情報を流す● golang jp(Twitter) ○ Go言語の情報を流しているあとはGoogle+などがある
  27. 27. 英語でもいいからタダで読みたい!● Learning Go ○ Go言語の基本的なことが書いてる● An Introduction to Programming in Go ○ Go言語というか、プログラミング初心者向けの本
  28. 28. Thank you!!https://plus.google.com/115271879735982073394/posts/cWWiyXMPXt3

×