Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20130316 プログラミング言語Go

13,073 views

Published on

Python Developers Festa 2013.03で発表したGoの紹介用スライドです。

Published in: Technology
  • Be the first to comment

20130316 プログラミング言語Go

  1. 1. プログラミング言語Goのご提案 2013年3月 やまぐちよしふみ
  2. 2. メッセージ 21世紀のプログラミング言語で、クラ ウド時代を生き抜くコアインフラの最 適化を! 2
  3. 3. こういう話はしません 3
  4. 4. プログラミング言語 Goの紹介 山口 能迪 id : ymotongpoo 4
  5. 5. お前、誰よ?• 山口能迪(やまぐちよしふみ)• YouTube Technical Account Manager, Google Inc.• id: ymotongpoo – とんぷーと呼ばれています 5
  6. 6. お前、誰よ?• Pythonが好きです• 翻訳 「Java開発者のための関数プログラミング」 オライリー・ジャパン 2012年06月発行 1,365円 (Ebook) 「Learn You Some Erlang for Great Good!」 オーム社 絶賛翻訳中 価格未定 (がんばります...) 6
  7. 7. 今日は非常に簡単なGoの紹介をします 7
  8. 8. 細かい文法を知りたい人は http://tour.golang.org をやってください 8
  9. 9. もうちょっと充実した資料が SlideShareに あがってます (あとで見てね) 9
  10. 10. 今日は 機能概要と事例紹介のみ 10
  11. 11. 機能概要このへんをざーっと話します• 実行速度&ビルド• 言語仕様• 標準パッケージ• 標準ツール 11
  12. 12. 実行速度 & ビルド 12
  13. 13. 実行速度&ビルド 実行速度出典:The Computer Language Benchmarks Game LL Go http://benchmarksgame.alioth.debian.org/u64q/which-programs-are-fastest.php 13
  14. 14. 実行速度&ビルド ビルド• ビルドファイルを作成する必要がない• 3rdパーティーパッケージは勝手に取得ソースコード ビルドpackage hoge $ cd $GOPATH $ go getimport ( $ go build -o main “github.com/foo/go-spam” $ ./main “bitbucket.org/gopher/bar” …)func SomeProcess(…) {…} 14
  15. 15. 言語仕様 15
  16. 16. 言語仕様 強く柔軟な型付け 強い型付けダメな例 良い例type JPY float64 type JPY float64type USD float64 type USD float64func SomeFunc() JPY { func Exchange(u USD) JPY { j := JPY(1000) return JPY(u * 100) u := USD(10) } return j + u func SomeFunc() JPY {} j := JPY(1000) u := USD(10) return j + Exchange(u) 型推論 } 16
  17. 17. 言語仕様 強く柔軟な型付け 柔軟な型付けGoではstructとinterfaceが定義できる• struct – フィールドとメソッドを宣言/定義• interface – メソッドの型定義のみを宣言 17
  18. 18. 言語仕様 強く柔軟な型付け 柔軟な型付け(例: io.Readerの定義)io.Readerの定義type Reader interface { Read(p []byte) (n int, err error)} io.Readerとみなされるos.Fileの定義type File struct { // filtered and private fields}func (f *File) Read(b []byte) (n int, err error) 18
  19. 19. 言語仕様 強く柔軟な型付け 柔軟な型付け(例: CSVファイルの読み込み)import ( “encoding/csv” os.Fileはio.Readerを実 “fmt” 装している “os”) io.Readerを引数にとる… 関数file, _ := os.Open(“hoge.csv”)reader := csv.NewReader(file)records, _ := reader.ReadAll() 記述力 大!for i, r := range records { fmt.Println(r[1])}… 19
  20. 20. 言語仕様 Intel CPUと言語の歴史8086-8088 i386 Pentium Xeon Pentium D Core Duo Xeon Quad Core i7 1978 1985 1993 2000 2005 2006 2008 マルチコアCPU時代 1971 1987 1995 2009 圧倒的現代感!!!!! 1983 1991 1993 2000 20
  21. 21. 言語仕様 並行プログラミング言語仕様として並行プログラミングをサポート• goroutine• channel 21
  22. 22. 言語仕様 goroutine簡単な記述で並列(非同期)処理が可能に同期 非同期Foo() go Foo()Bar() go Bar()SomeFunc() SomeFunc() “go” と書けば新しい goroutineが立ち上がる 22
  23. 23. 言語仕様 channel 複数のgoroutine間でのやり取りができるイメージ コード例 func ProcessA(c chan int) { … c <- SomeProcessA()Process B Process A … } Channel C func ProcessB(c chan int) { … SomeProcessB(<-c) … } 23
  24. 24. 標準パッケージ 24
  25. 25. 標準パッケージ 豊富な標準パッケージ “Battery included”と呼ばれるPython並archive crypto database errors image net regexp unicode tar aes sql expvar color http syntax utf16 zip cipher driver flag draw cgi runtime utf8bufio des debug fmt gif fcgi cgo unsafebuiltin dsa dwarf go jpeg httptest debugbytes ecdsa elf ast png httputil pprofcompress elliptic gosym build index pprof sort bzip2 hmac macho doc suffixarray mail strconv flate md5 pe parser io rpc strings gzip rand encoding printer ioutil jsonrpc sync lzw rc4 ascii85 scanner log smtp atomic zlib rsa asn1 token syslog textproto syscallcontainer sha1 base32 hash math url testing heap sha256 base64 adler32 big os iotest list sha512 binary crc32 cmplx exec quick ring subtle csv crc64 rand signal text tls gob fnv mime user scanner x509 hex html multipart path tabwriter pkix json template filepath template pem reflect pars xml e timehttp://golang.org/pkg/ 25
  26. 26. 標準パッケージ 豊富な標準パッケージ 準標準パッケージ 標準ではないがコアメンバーが管理しているレポジトリ名 crypto net image bcrypt otr dict bmp blowfish pbkdf2 html testdata bn256 poly1305 atom tiff cast5 ripemd160 testdata curve25519 salsa20 webkit md4 salsa scripted nacl scrypt idna box ssh ipv4 secretbox terminal proxy ocsp test publicsuffix openpgp twofish spdy armor xtea websocket clearsign xts elgamal errors packet https://code.google.com/p/go/source/browse?repo=xxxxx s2k 26
  27. 27. 標準ツール 27
  28. 28. 標準パッケージ 便利な標準ツール群Goでの開発を助ける標準ツール• go build パッケージをビルド• go get 必要なパッケージを取得• go install 必要なパッケージを取得&ビルド• go run 一時的にビルドし実行• go test テストとベンチマークを実行• gofmt フォーマットを直してくれる• godoc ドキュメントを生成 28
  29. 29. 事例紹介 29
  30. 30. 事例 vitess (YouTube)• vitess (vtocc)• MySQLのロードバランサ – YouTubeの全MySQLクエリをさばいている – Rowキャッシュとかもしてる• プレゼンはここで見られます 30
  31. 31. 事例 vitess (YouTube)• Goを採用した理由 1. CとPythonの間で書きやすく簡潔に書ける • ログローテーション 105行 • コネクションプール 227行 • memcacheクライアント 250行 2. ビルド&テストのサイクルが早い 3. 標準ライブラリが豊富で楽 4. 簡潔に書ける 31
  32. 32. 事例 Doozer (Heroku)• Doozer• PaxosのGo実装• Goを採用した理由 1. 言語として並行性のサポート • goroutine 2. 標準パッケージが豊富 3. gofmt 4. 静的リンクのバイナリ 5. 文法が簡潔 32
  33. 33. 事例 IronWorker (Iron.io)• IronWorker• タスクキューサーバ – Ruby on Railsで書いてたAPIサーバをGoで書きなおした – 30台のサーバが2台に• Goを採用した理由 1. 言語として並行性のサポート 2. 標準パッケージの豊富さ 3. 簡潔 4. ビルドが早い 33
  34. 34. 事例 他の大きな事例• SoundCloud – Bazookaと呼ばれるDoozerを使った社内デプロイ ツールを始め、多くの箇所で利用• Canonical – JujuをPythonからGoに移行• Atlassian – 仮想マシンクラスタのテストシステム• ngmoco:) – 独自HTTPサーバ & ロガー https://code.google.com/p/go-wiki/wiki/GoUsers 34
  35. 35. その他 35
  36. 36. Go 1.1 リリース間近 36
  37. 37. イベント告知Go Conference 2013 springhttp://connpass.com/event/1906/ 37
  38. 38. 38

×