Your SlideShare is downloading. ×
20130316 プログラミング言語Go
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

20130316 プログラミング言語Go

11,147
views

Published on

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

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

Published in: Technology

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

No Downloads
Views
Total Views
11,147
On Slideshare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
2
Comments
0
Likes
22
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • 3年前のPyFesでもりよしさんが発表したが、2012年3月のversion 1.0のリリースはかなり充実したものだった。プロダクション環境での利用事例も増えているのでぜひ試して貰いたい。
  • 20分という時間では語りきれない
  • 密度高く書きました
  • チャンネルにも型があるチャンネルに値を渡す/チャンネルから値を持ってくる演算子は矢印
  • 147の標準パッケージcrypto: 暗号化関係encoding: フォーマット関係image: 画像関係net: 通信関係testing: テストgo: Goのソースコード解析など
  • 全部紹介するのは大変なので下の3つだけ紹介
  • https://www.usenix.org/conference/lisa12/vitess-scaling-mysql-youtube-using-go
  • https://www.usenix.org/conference/lisa12/vitess-scaling-mysql-youtube-using-go動画ではビルドは3秒で終わると言っている他にもconcurrencyとcgoについて触れていた
  • Paxosは、信頼性の低い複数の処理ノードによるネットワークで「コンセンサス」を得るための各種手順Paxos自体は汎用的なアルゴリズムでさまざまな問題に適用できますが、最近のNoSQLの文脈で語られるのは「データストアをマルチマスター構成にしたときに、どうやってデータの整合性を効率的に確保するか」って問題へのPaxos応用です。Paxosは独立した並列なプロセスをメッセージパッシングで行うので、goroutine & channelがはまったwebsocketとか便利だった(いまは準標準パッケージ)無駄な議論をしなくて済むようになったデプロイがすごく楽簡潔に書けてとてもよい
  • Jujuは「サービス実装・オーケストレーションフレームワーク」と呼ばれる管理ツールで、複数の物理/仮想サーバーを一括管理できる。http://backstage.soundcloud.com/tag/golang/
  • Transcript

    • 1. プログラミング言語Goのご提案 2013年3月 やまぐちよしふみ
    • 2. メッセージ 21世紀のプログラミング言語で、クラ ウド時代を生き抜くコアインフラの最 適化を! 2
    • 3. こういう話はしません 3
    • 4. プログラミング言語 Goの紹介 山口 能迪 id : ymotongpoo 4
    • 5. お前、誰よ?• 山口能迪(やまぐちよしふみ)• YouTube Technical Account Manager, Google Inc.• id: ymotongpoo – とんぷーと呼ばれています 5
    • 6. お前、誰よ?• Pythonが好きです• 翻訳 「Java開発者のための関数プログラミング」 オライリー・ジャパン 2012年06月発行 1,365円 (Ebook) 「Learn You Some Erlang for Great Good!」 オーム社 絶賛翻訳中 価格未定 (がんばります...) 6
    • 7. 今日は非常に簡単なGoの紹介をします 7
    • 8. 細かい文法を知りたい人は http://tour.golang.org をやってください 8
    • 9. もうちょっと充実した資料が SlideShareに あがってます (あとで見てね) 9
    • 10. 今日は 機能概要と事例紹介のみ 10
    • 11. 機能概要このへんをざーっと話します• 実行速度&ビルド• 言語仕様• 標準パッケージ• 標準ツール 11
    • 12. 実行速度 & ビルド 12
    • 13. 実行速度&ビルド 実行速度出典:The Computer Language Benchmarks Game LL Go http://benchmarksgame.alioth.debian.org/u64q/which-programs-are-fastest.php 13
    • 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
    • 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. 言語仕様 強く柔軟な型付け 柔軟な型付けGoではstructとinterfaceが定義できる• struct – フィールドとメソッドを宣言/定義• interface – メソッドの型定義のみを宣言 17
    • 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. 言語仕様 強く柔軟な型付け 柔軟な型付け(例: 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. 言語仕様 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. 言語仕様 並行プログラミング言語仕様として並行プログラミングをサポート• goroutine• channel 21
    • 22. 言語仕様 goroutine簡単な記述で並列(非同期)処理が可能に同期 非同期Foo() go Foo()Bar() go Bar()SomeFunc() SomeFunc() “go” と書けば新しい goroutineが立ち上がる 22
    • 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
    • 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. 標準パッケージ 豊富な標準パッケージ 準標準パッケージ 標準ではないがコアメンバーが管理しているレポジトリ名 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
    • 28. 標準パッケージ 便利な標準ツール群Goでの開発を助ける標準ツール• go build パッケージをビルド• go get 必要なパッケージを取得• go install 必要なパッケージを取得&ビルド• go run 一時的にビルドし実行• go test テストとベンチマークを実行• gofmt フォーマットを直してくれる• godoc ドキュメントを生成 28
    • 29. 事例紹介 29
    • 30. 事例 vitess (YouTube)• vitess (vtocc)• MySQLのロードバランサ – YouTubeの全MySQLクエリをさばいている – Rowキャッシュとかもしてる• プレゼンはここで見られます 30
    • 31. 事例 vitess (YouTube)• Goを採用した理由 1. CとPythonの間で書きやすく簡潔に書ける • ログローテーション 105行 • コネクションプール 227行 • memcacheクライアント 250行 2. ビルド&テストのサイクルが早い 3. 標準ライブラリが豊富で楽 4. 簡潔に書ける 31
    • 32. 事例 Doozer (Heroku)• Doozer• PaxosのGo実装• Goを採用した理由 1. 言語として並行性のサポート • goroutine 2. 標準パッケージが豊富 3. gofmt 4. 静的リンクのバイナリ 5. 文法が簡潔 32
    • 33. 事例 IronWorker (Iron.io)• IronWorker• タスクキューサーバ – Ruby on Railsで書いてたAPIサーバをGoで書きなおした – 30台のサーバが2台に• Goを採用した理由 1. 言語として並行性のサポート 2. 標準パッケージの豊富さ 3. 簡潔 4. ビルドが早い 33
    • 34. 事例 他の大きな事例• SoundCloud – Bazookaと呼ばれるDoozerを使った社内デプロイ ツールを始め、多くの箇所で利用• Canonical – JujuをPythonからGoに移行• Atlassian – 仮想マシンクラスタのテストシステム• ngmoco:) – 独自HTTPサーバ & ロガー https://code.google.com/p/go-wiki/wiki/GoUsers 34
    • 35. その他 35
    • 36. Go 1.1 リリース間近 36
    • 37. イベント告知Go Conference 2013 springhttp://connpass.com/event/1906/ 37
    • 38. 38

    ×