22
イケてる Gopherになれる 5つのポイント 2013/06/17(火) @ヒカルのgo

Iketeru Gopher 5 points

Embed Size (px)

Citation preview

Page 1: Iketeru Gopher 5 points

イケてるGopherになれる5つのポイント

2013/06/17(火)@ヒカルのgo

Page 2: Iketeru Gopher 5 points

自己紹介

上田拓也KLab株式会社

仕事:

Webviewと戦う仕事

趣味:

Go言語, JStwitter : @tenntenn

Page 3: Iketeru Gopher 5 points

ポイント 1channelとgoroutineを使いこなせ!!

http://www.slideshare.net/takuyaueda967/goroutinechannelgogolang2

Page 4: Iketeru Gopher 5 points

for - selectパターン

● 各Goroutineが無限ループになっており、イベントリスナー的にChannelを使うパターン

Goroutine-1 Channel-1

Channel-2sele

ct

for{}

Goroutine-2for{}

Goroutine-3for{}

Page 5: Iketeru Gopher 5 points

Gopher君で表すとこんな感じ!

ひたすら本を入れる

ひたすら本を運ぶ

ひたすら台車を運ぶ

ひたすら本を燃やす

Page 6: Iketeru Gopher 5 points

ポイント 2structの埋め込みを使いこなせ!!

http://qiita.com/tenntenn/items/e04441a40aeb9c31dbafhttp://qiita.com/tenntenn/items/f2a154dd436c0fa37c5b

Page 7: Iketeru Gopher 5 points

埋め込み

type Hoge struct { N int}

type Piyo struct { Hoge M int}

func main() { piyo := &Piyo{Hoge{1}, 2} fmt.Println(piyo.N, piyo.M) fmt.Println(piyo.Hoge.N, piyo.M)}

Page 8: Iketeru Gopher 5 points

埋め込みを使ったインタフェースの実装

type Hoge interface {A()B()

}

type Fuga struct{ *Piyo }func (f *Fuga) A() { fmt.Println("Fuga A") }

type Piyo struct{}func (p *Piyo) B() { fmt.Println("Piyo B") }

func main() {var hoge Hoge = &Fuga{&Piyo{}}hoge.A()hoge.B()

}

Page 9: Iketeru Gopher 5 points

ポイント 3typeをうまく使いこなせ!!

http://qiita.com/tenntenn/items/c3afc87a20d9f50998bb

Page 10: Iketeru Gopher 5 points

組込み型のエイリアス型を作る

type Hex intfunc (h Hex) String() string { return fmt.Sprintf(“0x%x”, int(h))}

Page 11: Iketeru Gopher 5 points

関数に実装させる

type TaskFunc func()

func (f TaskFunc) Do() {f()

}

net/httpでも使われている

http.HandlerFunc

Page 12: Iketeru Gopher 5 points

ポイント 4reflectをうまく使いこなせ!!

http://www.slideshare.net/takuyaueda967/reflect-27186813https://github.com/goken/goken/blob/master/goken08-reflect/goken08-reflect.md

Page 13: Iketeru Gopher 5 points

標準ライブラリでも結構使われている

● encoding/jsonとかで使われている● ジェネリクスがないので、reflectを使う場面が多

func Unmarshal(data []byte, v interface{}) error

interface{}型でポインタを受け取り、reflectパッケージで値を設定している

Page 14: Iketeru Gopher 5 points

ポイント 5Gopher君をうまく使いこなせ!!

https://github.com/golang-samples/gopher-3dhttps://github.com/golang-samples/gopher-vector

Page 15: Iketeru Gopher 5 points

シーン:チケットの起票

   (( [チケット] [チケット]   ʕ ◔ϖ◔ʔ   [チケット] ))   |ヽ○==○  [チケット]  c |  ||_ | [チケット]  し' ̄(_)) ̄(_)) ̄(_)

Page 16: Iketeru Gopher 5 points

シーン:進捗を煽る

バン   はよバン ʕ∩ ◔ϖ◔ʔ バン はよ  / ミつ/ ̄ ̄ ̄/  ̄ ̄\/___/

Page 17: Iketeru Gopher 5 points

シーン:ランチに誘う

バン   はら減ったバン ʕ∩ ◔ϖ◔ʔ バン はら減った  / ミつ/ ̄ ̄ ̄/  ̄ ̄\/___/

Page 18: Iketeru Gopher 5 points

シーン:3Dゲームを作る

Page 19: Iketeru Gopher 5 points

シーン:合体させてみる

Page 20: Iketeru Gopher 5 points

まとめ

● channelとgoroutineを使いこなす● structの埋め込みを使いこなす● typeをうまく使いこなす● reflectをうまく使いこなす● Gopher君をうまく使いこなす

Go言語の初心者が見ると幸せになれる場所http://qiita.com/tenntenn/items/0e33a4959250d1a55045

Page 21: Iketeru Gopher 5 points

時間あまったら

Page 22: Iketeru Gopher 5 points

codegangsta/cli 便利!

https://github.com/codegangsta/cli● コマンドラインツールを作るためのライブラリ● コマンドライン引数が簡単に扱える● サブコマンドが簡単に作れる