今日から始めるgopher - スタートgo #0 @gdg名古屋

28
今日から始める Gopher 2012/10/13(Sat) スタートGo #0 @GDG名古屋

Upload: takuya-ueda

Post on 15-Jul-2015

1.856 views

Category:

Documents


5 download

TRANSCRIPT

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

今日から始める

Gopher

2012/10/13(Sat)スタートGo #0@GDG名古屋

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

自己紹介

上田拓也豊橋技術科学大学大学院電子・情報工学専攻博士後期課程3年

twitter : @tenntennblog: http://u.hinoichi.net

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

日頃やってる事

● 研究○ システム科学研究室所属○ 複雑系○ セルオートマトンを用いたデータ解析○ JavaやGo言語でシミュレータを作成

● ソフトウェア開発○ アルバイト

■ Go言語使ったWebアプリ○ 研究室

■ Javascript + d3jsでWebアプリ

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

アジェンダ

● Go言語とは?● なぜGo言語なのか?

○ シンプルな設計と文法○ 並列プログラミング○ 豊富なライブラリ群とgoツール

● Go言語を勉強するには?○ 書籍で勉強する○ Webで勉強する○ ML等で情報を得る○ 英語でいいからタダで読みたい!

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

Go言語とは?

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

Go言語とは?

● Googleが開発したコンパイラ言語○ その他のGoogleが開発した言語

■ Dart : JSの代替■ noop : JavaVMで動く言語(忘却のかなた)■ Python : 人気の言語

● 設計者:Robert Grisemer, Rob Pike, Ken Thompson

● 強い型付け● シンプルな設計・文法● 並列プログラミング● マスコットがかわいい

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

Gopher

Gopher(マスコット)

Gopher(Go言語ユーザ)

http://golang.org http://dancallahan.info/journal/go-overview/

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

Plan9のうさぎと似てないか?

→デザインした人が同じ!

http://www.digit.lk/10_march_foss

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

なぜGo言語なのか?

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

なぜGo言語なのか?

● シンプルな設計/文法○ 曖昧さを排除した設計○ 型推論○ 複数の戻り値○ ポインタはあるがポインタ演算はなし○ ダックタイピング○ 強い型付け

● 並列プログラミング○ ゴールーチンとチャネル

● 豊富なライブラリ群とgoツール○ goツールは最強○ Web系パッケージの豊富さ○ Google App Engine for go

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

シンプルな設計/文法-曖昧さを排除した設計-

● コンパイラはかなり厳しい(ドS)○ 明示的なキャスト○ 暗黙の型変換は行なわない

■ 同じ型同士の演算のみ○ 使っていないパッケージや変数は許さない

● 分かっていることは書く必要なし○ 文末のセミコロン○ 型推論○ ifやfor, switchの()○ switchのbreak

→コンパイル通ればこっちのもん!

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

シンプルな設計/文法-型推論-

● 値から変数の型を推論する○ ほとんど型を型名を書く必要がない

[Sample]// var 変数名 型名

var num intnum = 100// 同じ意味

num := 100

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

シンプルな設計/文法-複数の戻り値-

● 関数は複数の戻り値を返せる○ 計算結果とエラーが同時に返す場合に使える

[Sample]// 商と余りを返す

q, r := div(100, 3)

// 一時変数いらずのスワップ

a, b = b, a

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

シンプルな設計/文法-ポインタ-

● ポインタはあるが、ポインタ演算はなし○ unsafeパッケージを使えばできる(ボソ

[Sample]// ポインタはある

hoge := 100 // int型ptr := &hoge // *int型// ポインタ演算はできない

ptr++安全ですね!

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

シンプルな設計/文法-ダックタイピング-

● インタフェースの実装は明示的に行なう必要なし○ implementsなんていらない!

[Sample]// インタフェース

type Stringer interface { String() string}

// 実装

type Hoge struct {}func (h *Hoge) String() string {return "hoge"}

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

シンプルな設計/文法-強い型付け-

● 型が違う値同士の計算は明示的なキャストが必要!

[Sample]// int, float64n, m := 100, 10.5n + m // エラー

// キャストがいる

float64(n) + m安全ですね!

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

並列プログラミング-ゴールーチン-

● 軽量のスレッドに似たゴールーチンというものがある

● 予約語goを付けて関数を呼び出す○ 別のゴールーチンで動作する

[Sample]// 別のゴールーチンで

go something()//すぐにここに来る

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

並列プログラミング-チャネル-

● ゴールーチンとやり取りするための仕組み○ ゴールーチンとゴールーチンを繋ぐパイプのようなも

の!○ やり取りする値の型を持つ○ 安全にやりとりできる!

[Sample]done := make(chan bool)go func() {

for i := 0; i < 1000000; i++{}done <- true // チャネルで送る

}()<- done // 終わるまで待つ

main subtrue

Go

安全ですね!

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

豊富なライブラリ群とgoツール-Web系パッケージ-

● net/http○ 基本的なWebサーバの機能を提供

● text/template, html/template○ テンプレートエンジン

● encoding/json, encoding/xml○ JSON, xmlのシリアライズ

● net/http/fcgi○ FastCGIをサポート

● その他 暗号やハッシュ関数ライブラリ等

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

豊富なライブラリ群とgoツール-goツール-

● goツール○ ビルド

■ go build○ ビルド&実行

■ go run○ パッケージ管理

■ go get, go install[例] go get github.com/tenntenn/goweb-msgpack

○ 単体テスト■ go test

○ コード整形■ gofmt

○ 互換性保持■ go fix

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

豊富なライブラリ群とgoツール-単体テストパッケージ-

● testing○ 単体テスト用のパッケージ

● net/http/httptest○ Webアプリの単体テスト用パッケージ

● go test○ xxx_test.goという名前のgoファイルを対象に単体テスト

を行なうツール

● gocov○ カバレッジツール

■ 現在のバージョンにはオフィシャルにはない

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

豊富なライブラリ群とgoツール-Google App Engine for go-

● Google App Engineのgo言語版○ PythonとJavaとは違い唯一、ネイティブコードになる○ Python版と比べまだ機能は少ない○ ゴールーチンは使えるが、並列にならない

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

Go言語を勉強するには?

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

書籍で勉強する

現在日本語の書籍は4冊発売されている

http://p.tl/yJeG http://p.tl/5Wnf http://p.tl/suCJ http://p.tl/XBg8

New!!

※この3冊持ってきてますので、試し読みしたい片はどうぞ。

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

Webで勉強する

● golang.org(本家)○ 情報量が多い!○ 英語!

● golang.jp○ golang.orgの日本語訳○ ちょっと情報が古い(随時更新されてる)

● A tour of go○ チュートリアル!○ 日本語版もある○ 後でやります

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

ML等で情報を得る

● go-nuts (Google グループ)○ オフィシャルなML

● golang-jp (Google グループ)○ 日本語でやりとりするML

● go-weekly(Googleグループ)○ Go言語の最新情報を流す

● golang jp(Twitter)○ Go言語の情報を流している

あとはGoogle+などがある

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

英語でもいいからタダで読みたい!

● Learning Go○ Go言語の基本的なことが書いてる

● An Introduction to Programming in Go○ Go言語というか、プログラミング初心者向けの本

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

Thank you!!

https://plus.google.com/115271879735982073394/posts/cWWiyXMPXt3