SlideShare ist ein Scribd-Unternehmen logo
1 von 38
プログラミング言語Goのご提
案



  2013年3月
  やまぐちよしふみ
メッセージ
   21世紀のプログラミング言語で、クラ
    ウド時代を生き抜くコアインフラの最
    適化を!




                     2
こういう話はしません


             3
プログラミング言語 Goの紹介

                山口 能迪
         id : ymotongpoo
                           4
お前、誰よ?

• 山口能迪(やまぐちよしふみ)
• YouTube Technical Account Manager, Google
  Inc.
• id: ymotongpoo
  – とんぷーと呼ばれています




                                              5
お前、誰よ?

• Pythonが好きです
• 翻訳

   「Java開発者のための関数プログラミング」
        オライリー・ジャパン
        2012年06月発行 1,365円 (Ebook)


   「Learn You Some Erlang for Great Good!」
        オーム社
        絶賛翻訳中 価格未定 (がんばります...)


                                             6
今日は非常に簡単な
Goの紹介をします



            7
細かい文法を知りたい人は
 http://tour.golang.org
   をやってください


                          8
もうちょっと充実した資料が
    SlideShareに
    あがってます
   (あとで見てね)


              9
今日は
 機能概要と
事例紹介のみ

         10
機能概要

このへんをざーっと話します

•   実行速度&ビルド
•   言語仕様
•   標準パッケージ
•   標準ツール




                11
実行速度
  &
 ビルド

       12
実行速度&ビルド
            実行速度
出典:The Computer Language Benchmarks Game
                                                                    LL




                                              Go




               http://benchmarksgame.alioth.debian.org/u64q/which-programs-are-fastest.php
                                                                                             13
実行速度&ビルド
          ビルド

• ビルドファイルを作成する必要がない
• 3rdパーティーパッケージは勝手に取得
ソースコード                          ビルド
package hoge                    $   cd $GOPATH
                                $   go get
import (                        $   go build -o main
   “github.com/foo/go-spam”     $   ./main
   “bitbucket.org/gopher/bar”
   …
)

func SomeProcess(…) {…}
                                                       14
言語仕様


       15
言語仕様
            強く柔軟な型付け
            強い型付け

ダメな例                     良い例
type JPY float64         type JPY float64
type USD float64         type USD float64

func 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
言語仕様
         強く柔軟な型付け
         柔軟な型付け

Goではstructとinterfaceが定義できる
• struct
  – フィールドとメソッドを宣言/定義
• interface
  – メソッドの型定義のみを宣言




                                    17
言語仕様
            強く柔軟な型付け
            柔軟な型付け(例: 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
言語仕様
            強く柔軟な型付け
            柔軟な型付け(例: 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
言語仕様
                   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
言語仕様
        並行プログラミング

言語仕様として並行プログラミングをサポート

• goroutine
• channel




                           21
言語仕様
         goroutine

簡単な記述で並列(非同期)処理が可能に

同期                    非同期
Foo()                 go Foo()
Bar()                 go Bar()
SomeFunc()            SomeFunc()




     “go” と書けば新しい
    goroutineが立ち上がる

                                          22
言語仕様
            channel

  複数のgoroutine間でのやり取りができる

イメージ                                コード例
                                    func ProcessA(c chan int) {
                                       …
                                       c <- SomeProcessA()
Process B               Process A      …
                                    }
            Channel C
                                    func ProcessB(c chan int) {
                                       …
                                       SomeProcessB(<-c)
                                       …
                                    }
                                                            23
標準パッケージ


          24
標準パッケージ
                    豊富な標準パッケージ

   “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            utf8
bufio          des        debug           fmt                gif                     fcgi           cgo         unsafe
builtin        dsa           dwarf        go                 jpeg                    httptest       debug
bytes          ecdsa         elf              ast            png                     httputil       pprof
compress       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      syscall
container      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
                                                                                                time
http://golang.org/pkg/
                                                                                                                  25
標準パッケージ
                 豊富な標準パッケージ

 準標準パッケージ
 標準ではないがコアメンバーが管理している
レポジトリ名
     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
標準パッケージ
     便利な標準ツール群

Goでの開発を助ける標準ツール
• go build   パッケージをビルド
• go get     必要なパッケージを取得
• go install 必要なパッケージを取得&ビルド
• go run     一時的にビルドし実行
• go test    テストとベンチマークを実行
• gofmt      フォーマットを直してくれる
• godoc      ドキュメントを生成

                           28
事例紹介


       29
事例
     vitess (YouTube)

• vitess (vtocc)
• MySQLのロードバランサ
 – YouTubeの全MySQLクエリをさばいている
 – Rowキャッシュとかもしてる
• プレゼンはここで見られます




                               30
事例
     vitess (YouTube)

• Goを採用した理由
 1. CとPythonの間で書きやすく簡潔に書ける
   • ログローテーション                 105行
   • コネクションプール                 227行
   • memcacheクライアント     250行
 2. ビルド&テストのサイクルが早い
 3. 標準ライブラリが豊富で楽
 4. 簡潔に書ける




                                       31
事例
           Doozer (Heroku)

• Doozer
• PaxosのGo実装

• Goを採用した理由
 1. 言語として並行性のサポート
      •    goroutine
 2.       標準パッケージが豊富
 3.       gofmt
 4.       静的リンクのバイナリ
 5.       文法が簡潔

                              32
事例
       IronWorker (Iron.io)

• IronWorker
• タスクキューサーバ
 – Ruby on Railsで書いてたAPIサーバをGoで書きなおした
 – 30台のサーバが2台に


• Goを採用した理由
 1.   言語として並行性のサポート
 2.   標準パッケージの豊富さ
 3.   簡潔
 4.   ビルドが早い

                                        33
事例
        他の大きな事例

• SoundCloud
  – Bazookaと呼ばれるDoozerを使った社内デプロイ
    ツールを始め、多くの箇所で利用
• Canonical
  – JujuをPythonからGoに移行
• Atlassian
  – 仮想マシンクラスタのテストシステム
• ngmoco:)
  – 独自HTTPサーバ & ロガー
               https://code.google.com/p/go-wiki/wiki/GoUsers


                                                           34
その他


      35
Go 1.1 リリース間近




                36
イベント告知

Go Conference 2013 spring
http://connpass.com/event/1906/




                                  37
38

Weitere ähnliche Inhalte

Was ist angesagt?

Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementationsmasahitojp
 
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会Takuya Ueda
 
静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発Takuya Ueda
 
tse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティtse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティAtsuo Ishimoto
 
Polyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGAPolyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGAryos36
 
PyCon JP 2014 plone terada
PyCon JP 2014 plone teradaPyCon JP 2014 plone terada
PyCon JP 2014 plone teradaManabu Terada
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようShinya Takamaeda-Y
 
20160730 fluentd meetup in matsue slide
20160730 fluentd meetup in matsue slide20160730 fluentd meetup in matsue slide
20160730 fluentd meetup in matsue slidecosmo0920
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Tetsuya Morimoto
 
マスター・オブ・goパッケージ
マスター・オブ・goパッケージマスター・オブ・goパッケージ
マスター・オブ・goパッケージTakuya Ueda
 
Vivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリームVivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリームmarsee101
 
2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会虎の穴 開発室
 
pkgsrc で gimp がアレだった件 - デマと放置と私
pkgsrc で gimp がアレだった件 - デマと放置と私pkgsrc で gimp がアレだった件 - デマと放置と私
pkgsrc で gimp がアレだった件 - デマと放置と私Akio OBATA
 
Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカーTetsuya Morimoto
 
エキスパートGo
エキスパートGoエキスパートGo
エキスパートGoTakuya Ueda
 
ROS Tutorial 02 - CIT
ROS Tutorial 02 - CITROS Tutorial 02 - CIT
ROS Tutorial 02 - CITDaiki Maekawa
 

Was ist angesagt? (19)

Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementations
 
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
 
静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発
 
tse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティtse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティ
 
ECMAScript没proposal追悼式
ECMAScript没proposal追悼式ECMAScript没proposal追悼式
ECMAScript没proposal追悼式
 
Polyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGAPolyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGA
 
PyCon JP 2014 plone terada
PyCon JP 2014 plone teradaPyCon JP 2014 plone terada
PyCon JP 2014 plone terada
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
 
20160730 fluentd meetup in matsue slide
20160730 fluentd meetup in matsue slide20160730 fluentd meetup in matsue slide
20160730 fluentd meetup in matsue slide
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)
 
マスター・オブ・goパッケージ
マスター・オブ・goパッケージマスター・オブ・goパッケージ
マスター・オブ・goパッケージ
 
Vivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリームVivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリーム
 
kyotovim#1
kyotovim#1kyotovim#1
kyotovim#1
 
Go入門
Go入門Go入門
Go入門
 
2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会
 
pkgsrc で gimp がアレだった件 - デマと放置と私
pkgsrc で gimp がアレだった件 - デマと放置と私pkgsrc で gimp がアレだった件 - デマと放置と私
pkgsrc で gimp がアレだった件 - デマと放置と私
 
Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカー
 
エキスパートGo
エキスパートGoエキスパートGo
エキスパートGo
 
ROS Tutorial 02 - CIT
ROS Tutorial 02 - CITROS Tutorial 02 - CIT
ROS Tutorial 02 - CIT
 

Andere mochten auch

私なりの the Go in 2014
私なりの the Go in 2014私なりの the Go in 2014
私なりの the Go in 2014Ryuji Iwata
 
AWS SDK for Go を使って作ってみた話
AWS SDK for Go を使って作ってみた話AWS SDK for Go を使って作ってみた話
AWS SDK for Go を使って作ってみた話uchimanajet7
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンAkihiko Horiuchi
 
Apcera Case Study: The selection of the Go language
Apcera Case Study: The selection of the Go languageApcera Case Study: The selection of the Go language
Apcera Case Study: The selection of the Go languageDerek Collison
 
Xamarin 概要 @ 2015/1/29 CROSS 2015
Xamarin 概要 @ 2015/1/29 CROSS 2015Xamarin 概要 @ 2015/1/29 CROSS 2015
Xamarin 概要 @ 2015/1/29 CROSS 2015Yoshito Tabuchi
 
CROSS 2015 モバイル開発環境セッション
CROSS 2015 モバイル開発環境セッションCROSS 2015 モバイル開発環境セッション
CROSS 2015 モバイル開発環境セッションMasahiro Tanaka
 
Delphi のひみつ!(2015/01/29 CROSS 2015)
Delphi のひみつ!(2015/01/29 CROSS 2015)Delphi のひみつ!(2015/01/29 CROSS 2015)
Delphi のひみつ!(2015/01/29 CROSS 2015)Jun Hosokawa
 
Eureka go 2015_12_12
Eureka go 2015_12_12Eureka go 2015_12_12
Eureka go 2015_12_12matsuo kenji
 
Go言語と過ごした一週間
Go言語と過ごした一週間Go言語と過ごした一週間
Go言語と過ごした一週間Shintaro Kitayama
 
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...Hidenori Takeshita
 
Chrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみるChrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみるMasakazu Muraoka
 
Golang, make and robotics #gocon
Golang, make and robotics #goconGolang, make and robotics #gocon
Golang, make and robotics #goconHideyuki TAKEI
 
alphawing meets heroku
alphawing meets herokualphawing meets heroku
alphawing meets herokuKyosuke Kameda
 

Andere mochten auch (20)

私なりの the Go in 2014
私なりの the Go in 2014私なりの the Go in 2014
私なりの the Go in 2014
 
AWS SDK for Go を使って作ってみた話
AWS SDK for Go を使って作ってみた話AWS SDK for Go を使って作ってみた話
AWS SDK for Go を使って作ってみた話
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
Gocon2013
Gocon2013Gocon2013
Gocon2013
 
100420
100420100420
100420
 
Apcera Case Study: The selection of the Go language
Apcera Case Study: The selection of the Go languageApcera Case Study: The selection of the Go language
Apcera Case Study: The selection of the Go language
 
Xamarin 概要 @ 2015/1/29 CROSS 2015
Xamarin 概要 @ 2015/1/29 CROSS 2015Xamarin 概要 @ 2015/1/29 CROSS 2015
Xamarin 概要 @ 2015/1/29 CROSS 2015
 
CROSS 2015 モバイル開発環境セッション
CROSS 2015 モバイル開発環境セッションCROSS 2015 モバイル開発環境セッション
CROSS 2015 モバイル開発環境セッション
 
Delphi のひみつ!(2015/01/29 CROSS 2015)
Delphi のひみつ!(2015/01/29 CROSS 2015)Delphi のひみつ!(2015/01/29 CROSS 2015)
Delphi のひみつ!(2015/01/29 CROSS 2015)
 
Eureka go 2015_12_12
Eureka go 2015_12_12Eureka go 2015_12_12
Eureka go 2015_12_12
 
Go言語と過ごした一週間
Go言語と過ごした一週間Go言語と過ごした一週間
Go言語と過ごした一週間
 
らくちん Go言語
らくちん Go言語らくちん Go言語
らくちん Go言語
 
Github第8章
Github第8章Github第8章
Github第8章
 
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
 
Chrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみるChrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみる
 
HighBatch
HighBatchHighBatch
HighBatch
 
Go+revel
Go+revelGo+revel
Go+revel
 
Goを知る
Goを知るGoを知る
Goを知る
 
Golang, make and robotics #gocon
Golang, make and robotics #goconGolang, make and robotics #gocon
Golang, make and robotics #gocon
 
alphawing meets heroku
alphawing meets herokualphawing meets heroku
alphawing meets heroku
 

Ähnlich wie 20130316 プログラミング言語Go

Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Takuya Ueda
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code readingHiro Yoshioka
 
Exgettextの話
Exgettextの話Exgettextの話
Exgettextの話k1complete
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 
2011年10月21日
2011年10月21日2011年10月21日
2011年10月21日nukaemon
 
Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察貴仁 大和屋
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputingNoboru Irieda
 
L-1グランプリ "D言語"
L-1グランプリ "D言語"L-1グランプリ "D言語"
L-1グランプリ "D言語"det coder
 
ソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルドソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルドToru Tamaki
 
Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御Norito Agetsuma
 
Emacsでの翻訳 - Emacsで訳す、gettextで国際化されたソフトウェア
Emacsでの翻訳 - Emacsで訳す、gettextで国際化されたソフトウェアEmacsでの翻訳 - Emacsで訳す、gettextで国際化されたソフトウェア
Emacsでの翻訳 - Emacsで訳す、gettextで国際化されたソフトウェアMasaharu IWAI
 
初心者向けGo言語勉強会
初心者向けGo言語勉強会初心者向けGo言語勉強会
初心者向けGo言語勉強会leverages_event
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…Yasumasa Suenaga
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義JPCERT Coordination Center
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜Hideki Takase
 
Python Kyoto study
Python Kyoto studyPython Kyoto study
Python Kyoto studyNaoya Inada
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Hiro Yoshioka
 

Ähnlich wie 20130316 プログラミング言語Go (20)

Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code reading
 
Exgettextの話
Exgettextの話Exgettextの話
Exgettextの話
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
2011年10月21日
2011年10月21日2011年10月21日
2011年10月21日
 
Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
L-1グランプリ "D言語"
L-1グランプリ "D言語"L-1グランプリ "D言語"
L-1グランプリ "D言語"
 
ソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルドソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルド
 
Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御
 
Emacsでの翻訳 - Emacsで訳す、gettextで国際化されたソフトウェア
Emacsでの翻訳 - Emacsで訳す、gettextで国際化されたソフトウェアEmacsでの翻訳 - Emacsで訳す、gettextで国際化されたソフトウェア
Emacsでの翻訳 - Emacsで訳す、gettextで国際化されたソフトウェア
 
最新UE4タイトルでのローカライズ事例 (UE4 Localization Deep Dive)
最新UE4タイトルでのローカライズ事例 (UE4 Localization Deep Dive)最新UE4タイトルでのローカライズ事例 (UE4 Localization Deep Dive)
最新UE4タイトルでのローカライズ事例 (UE4 Localization Deep Dive)
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
初心者向けGo言語勉強会
初心者向けGo言語勉強会初心者向けGo言語勉強会
初心者向けGo言語勉強会
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
 
Python Kyoto study
Python Kyoto studyPython Kyoto study
Python Kyoto study
 
Runtime c++editing
Runtime c++editingRuntime c++editing
Runtime c++editing
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010
 

Mehr von Yoshifumi Yamaguchi

Pythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjpPythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjpYoshifumi Yamaguchi
 
Sphinxで翻訳してたら本が出てた話
Sphinxで翻訳してたら本が出てた話Sphinxで翻訳してたら本が出てた話
Sphinxで翻訳してたら本が出てた話Yoshifumi Yamaguchi
 
Learn You Some Erlang for great good! 日本語化プロジェクト
Learn You Some Erlang for great good! 日本語化プロジェクトLearn You Some Erlang for great good! 日本語化プロジェクト
Learn You Some Erlang for great good! 日本語化プロジェクトYoshifumi Yamaguchi
 
[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLT[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLTYoshifumi Yamaguchi
 
[20110129] sphinx theme collection 2011春
[20110129] sphinx theme collection 2011春[20110129] sphinx theme collection 2011春
[20110129] sphinx theme collection 2011春Yoshifumi Yamaguchi
 
[20101203] ドキュメントを作りたくなってしまう魔法のツールsphinx(山口発表用)
[20101203] ドキュメントを作りたくなってしまう魔法のツールsphinx(山口発表用)[20101203] ドキュメントを作りたくなってしまう魔法のツールsphinx(山口発表用)
[20101203] ドキュメントを作りたくなってしまう魔法のツールsphinx(山口発表用)Yoshifumi Yamaguchi
 

Mehr von Yoshifumi Yamaguchi (8)

Pythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjpPythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjp
 
Sphinxで翻訳してたら本が出てた話
Sphinxで翻訳してたら本が出てた話Sphinxで翻訳してたら本が出てた話
Sphinxで翻訳してたら本が出てた話
 
Learn You Some Erlang for great good! 日本語化プロジェクト
Learn You Some Erlang for great good! 日本語化プロジェクトLearn You Some Erlang for great good! 日本語化プロジェクト
Learn You Some Erlang for great good! 日本語化プロジェクト
 
[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLT[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLT
 
YouTube APIの紹介
YouTube APIの紹介YouTube APIの紹介
YouTube APIの紹介
 
[20110219] pfffについて
[20110219] pfffについて[20110219] pfffについて
[20110219] pfffについて
 
[20110129] sphinx theme collection 2011春
[20110129] sphinx theme collection 2011春[20110129] sphinx theme collection 2011春
[20110129] sphinx theme collection 2011春
 
[20101203] ドキュメントを作りたくなってしまう魔法のツールsphinx(山口発表用)
[20101203] ドキュメントを作りたくなってしまう魔法のツールsphinx(山口発表用)[20101203] ドキュメントを作りたくなってしまう魔法のツールsphinx(山口発表用)
[20101203] ドキュメントを作りたくなってしまう魔法のツールsphinx(山口発表用)
 

Kürzlich hochgeladen

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Kürzlich hochgeladen (9)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

20130316 プログラミング言語Go

  • 2. メッセージ  21世紀のプログラミング言語で、クラ ウド時代を生き抜くコアインフラの最 適化を! 2
  • 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
  • 9. もうちょっと充実した資料が SlideShareに あがってます (あとで見てね) 9
  • 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 get import ( $ go build -o main “github.com/foo/go-spam” $ ./main “bitbucket.org/gopher/bar” … ) func SomeProcess(…) {…} 14
  • 16. 言語仕様 強く柔軟な型付け 強い型付け ダメな例 良い例 type JPY float64 type JPY float64 type USD float64 type USD float64 func 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
  • 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 utf8 bufio des debug fmt gif fcgi cgo unsafe builtin dsa dwarf go jpeg httptest debug bytes ecdsa elf ast png httputil pprof compress 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 syscall container 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 time http://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
  • 28. 標準パッケージ 便利な標準ツール群 Goでの開発を助ける標準ツール • go build パッケージをビルド • go get 必要なパッケージを取得 • go install 必要なパッケージを取得&ビルド • go run 一時的にビルドし実行 • go test テストとベンチマークを実行 • gofmt フォーマットを直してくれる • godoc ドキュメントを生成 28
  • 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
  • 37. イベント告知 Go Conference 2013 spring http://connpass.com/event/1906/ 37
  • 38. 38

Hinweis der Redaktion

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