Upload
takuya-ueda
View
1.860
Download
5
Embed Size (px)
Citation preview
今日から始める
Gopher
2012/10/13(Sat)スタートGo #0@GDG名古屋
自己紹介
上田拓也豊橋技術科学大学大学院電子・情報工学専攻博士後期課程3年
twitter : @tenntennblog: http://u.hinoichi.net
日頃やってる事
● 研究○ システム科学研究室所属○ 複雑系○ セルオートマトンを用いたデータ解析○ JavaやGo言語でシミュレータを作成
● ソフトウェア開発○ アルバイト
■ Go言語使ったWebアプリ○ 研究室
■ Javascript + d3jsでWebアプリ
アジェンダ
● Go言語とは?● なぜGo言語なのか?
○ シンプルな設計と文法○ 並列プログラミング○ 豊富なライブラリ群とgoツール
● Go言語を勉強するには?○ 書籍で勉強する○ Webで勉強する○ ML等で情報を得る○ 英語でいいからタダで読みたい!
Go言語とは?
Go言語とは?
● Googleが開発したコンパイラ言語○ その他のGoogleが開発した言語
■ Dart : JSの代替■ noop : JavaVMで動く言語(忘却のかなた)■ Python : 人気の言語
● 設計者:Robert Grisemer, Rob Pike, Ken Thompson
● 強い型付け● シンプルな設計・文法● 並列プログラミング● マスコットがかわいい
Gopher
Gopher(マスコット)
Gopher(Go言語ユーザ)
http://golang.org http://dancallahan.info/journal/go-overview/
Plan9のうさぎと似てないか?
→デザインした人が同じ!
http://www.digit.lk/10_march_foss
なぜGo言語なのか?
なぜGo言語なのか?
● シンプルな設計/文法○ 曖昧さを排除した設計○ 型推論○ 複数の戻り値○ ポインタはあるがポインタ演算はなし○ ダックタイピング○ 強い型付け
● 並列プログラミング○ ゴールーチンとチャネル
● 豊富なライブラリ群とgoツール○ goツールは最強○ Web系パッケージの豊富さ○ Google App Engine for go
シンプルな設計/文法-曖昧さを排除した設計-
● コンパイラはかなり厳しい(ドS)○ 明示的なキャスト○ 暗黙の型変換は行なわない
■ 同じ型同士の演算のみ○ 使っていないパッケージや変数は許さない
● 分かっていることは書く必要なし○ 文末のセミコロン○ 型推論○ ifやfor, switchの()○ switchのbreak
→コンパイル通ればこっちのもん!
シンプルな設計/文法-型推論-
● 値から変数の型を推論する○ ほとんど型を型名を書く必要がない
[Sample]// var 変数名 型名
var num intnum = 100// 同じ意味
num := 100
シンプルな設計/文法-複数の戻り値-
● 関数は複数の戻り値を返せる○ 計算結果とエラーが同時に返す場合に使える
[Sample]// 商と余りを返す
q, r := div(100, 3)
// 一時変数いらずのスワップ
a, b = b, a
シンプルな設計/文法-ポインタ-
● ポインタはあるが、ポインタ演算はなし○ unsafeパッケージを使えばできる(ボソ
[Sample]// ポインタはある
hoge := 100 // int型ptr := &hoge // *int型// ポインタ演算はできない
ptr++安全ですね!
シンプルな設計/文法-ダックタイピング-
● インタフェースの実装は明示的に行なう必要なし○ implementsなんていらない!
[Sample]// インタフェース
type Stringer interface { String() string}
// 実装
type Hoge struct {}func (h *Hoge) String() string {return "hoge"}
シンプルな設計/文法-強い型付け-
● 型が違う値同士の計算は明示的なキャストが必要!
[Sample]// int, float64n, m := 100, 10.5n + m // エラー
// キャストがいる
float64(n) + m安全ですね!
並列プログラミング-ゴールーチン-
● 軽量のスレッドに似たゴールーチンというものがある
● 予約語goを付けて関数を呼び出す○ 別のゴールーチンで動作する
[Sample]// 別のゴールーチンで
go something()//すぐにここに来る
並列プログラミング-チャネル-
● ゴールーチンとやり取りするための仕組み○ ゴールーチンとゴールーチンを繋ぐパイプのようなも
の!○ やり取りする値の型を持つ○ 安全にやりとりできる!
[Sample]done := make(chan bool)go func() {
for i := 0; i < 1000000; i++{}done <- true // チャネルで送る
}()<- done // 終わるまで待つ
main subtrue
Go
安全ですね!
豊富なライブラリ群とgoツール-Web系パッケージ-
● net/http○ 基本的なWebサーバの機能を提供
● text/template, html/template○ テンプレートエンジン
● encoding/json, encoding/xml○ JSON, xmlのシリアライズ
● net/http/fcgi○ FastCGIをサポート
● その他 暗号やハッシュ関数ライブラリ等
豊富なライブラリ群とgoツール-goツール-
● goツール○ ビルド
■ go build○ ビルド&実行
■ go run○ パッケージ管理
■ go get, go install[例] go get github.com/tenntenn/goweb-msgpack
○ 単体テスト■ go test
○ コード整形■ gofmt
○ 互換性保持■ go fix
豊富なライブラリ群とgoツール-単体テストパッケージ-
● testing○ 単体テスト用のパッケージ
● net/http/httptest○ Webアプリの単体テスト用パッケージ
● go test○ xxx_test.goという名前のgoファイルを対象に単体テスト
を行なうツール
● gocov○ カバレッジツール
■ 現在のバージョンにはオフィシャルにはない
豊富なライブラリ群とgoツール-Google App Engine for go-
● Google App Engineのgo言語版○ PythonとJavaとは違い唯一、ネイティブコードになる○ Python版と比べまだ機能は少ない○ ゴールーチンは使えるが、並列にならない
Go言語を勉強するには?
書籍で勉強する
現在日本語の書籍は4冊発売されている
http://p.tl/yJeG http://p.tl/5Wnf http://p.tl/suCJ http://p.tl/XBg8
New!!
※この3冊持ってきてますので、試し読みしたい片はどうぞ。
Webで勉強する
● golang.org(本家)○ 情報量が多い!○ 英語!
● golang.jp○ golang.orgの日本語訳○ ちょっと情報が古い(随時更新されてる)
● A tour of go○ チュートリアル!○ 日本語版もある○ 後でやります
ML等で情報を得る
● go-nuts (Google グループ)○ オフィシャルなML
● golang-jp (Google グループ)○ 日本語でやりとりするML
● go-weekly(Googleグループ)○ Go言語の最新情報を流す
● golang jp(Twitter)○ Go言語の情報を流している
あとはGoogle+などがある
英語でもいいからタダで読みたい!
● Learning Go○ Go言語の基本的なことが書いてる
● An Introduction to Programming in Go○ Go言語というか、プログラミング初心者向けの本
Thank you!!
https://plus.google.com/115271879735982073394/posts/cWWiyXMPXt3