Upgrade to Pro — share decks privately, control downloads, hide ads and more …

About Go Lang

About Go Lang

2014/5/9 Livesense SICP倶楽部LT大会にて
Goについての解説

Livesense Inc.

May 15, 2014
Tweet

More Decks by Livesense Inc.

Other Decks in Programming

Transcript

  1. Go言語とは •  Googleが開発したコンパイラ言語 •  2009年、Robert Griesemer, Rob Pike, Ken Thompson

    •  対象:大規模なシステムソフトウェア、サーバソフトウェア •  低レイヤとの親和性(プロセス管理、システムコール…) •  C/C++に並ぶ実行速度 •  開発者の増大に耐える、シンプルな洗練された言語セット C/C++に代わる新しい選択肢
  2. Go言語の特徴 •  静的型付け + 型推論 •  ネイティブコードへのコンパイル •  Linux, OS

    X, Free BSD, Windows •  DuckTyping •  ガベージコレクション •  豊富なライブラリ C言語に動的型付け言語の技術を取り込んだ
  3. 言語仕様 •  基本はCの拡張 •  関数と構造体(+メソッド) •  基本文法は大きく変化 •  変数・関数宣言の型は後置 • 

    var message string = "hello" •  変数宣言時に型の明示が不要(型推論) •  message := "hello" •  ループはfor文のみ •  基本方針:シンプルかつ必要十分な言語セット
  4. 言語仕様(続き) •  クラス階層が存在しない •  継承が存在しない •  簡易な委譲の仕組みが提供されている •  複数戻り値、複数同時代入 • 

    a, b = b, a •  ポインタ演算は存在しない •  配列に対するアドレス加算などはできない •  Slice •  固定長配列をラップした組み込み型 •  メモリ領域の再確保などを容易に行える •  第一級関数 •  クロージャが作れる •  コールバック関数など •  Interfaceを用いたDuckTypingの実現 •  並列処理を容易にする機能 •  Goroutine, Channel
  5. Interface •  大体Javaと同じ •  抽象と具象を分離 •  ポリモーフィズムを実現 •  実装型でimplements宣言は不要 • 

    DuckTypingを実現 type!Abser!interface!{! !!Abs()!float64! }! インターフェース宣言:メソッド型定義の羅列
  6. 並列処理 Foo() Bar() Baz() go Foo() go Bar() Baz() 逐次処理

    並列処理 Foo(), Bar()はそれぞれ新しい Goroutineで並列実行される •  Goroutine(ゴルーチン)という仕組みを使う •  スレッドのようなもの
  7. Goroutineとは •  概ねスレッドのようなもの •  Goroutine != スレッド •  スレッドをさらに分割したもの • 

    一つのスレッドに複数のGoroutine •  軽量 •  たくさん立ち上げられる Goroutine プロセス スレッド スレッド Goroutine
  8. Goroutine間の通信 •  1. 共有メモリを使う •  Mutexが用意されている •  2. Channelという仕組みを使う • 

    Goが推奨する並行処理モデル •  メッセージパッシング •  Go曰く:"Do not communicate by sharing memory; instead, share memory by communicating" メモリ共有によって通信するのではなく、通信によってメモリを共有しろ
  9. Channel func  RoutineA(c  chan  int)  {        

     ...          c  <-­‐  v          ...   }     func  RoutineB(c  chan  int)  {          ...          var  v  :=  <-­‐c          ...   } •  値の交換と同期を担ってくれる RoutineAが c <- v を実行するまで ブロックされる channel c