Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Go初心者向け
ハンズオン
コマンドラインツールを作ろう
2015/10/31(土)
@Go初心者向けハンズオン
The Go gopher was designed by Renee French.
The gopher stickers w...
アジェンダ
● 自己紹介
● ハンズオンについて
● ドキュメントとPlayground
● 型・メソッド・インタフェース
● もう一歩先へ
自己紹介
KLab株式会社
KLabGames事業本部 エンジニア
上田拓也
twitter: @tenntenn
■ 好きな言語
Go, JavaScript, Lua
■ 業務
モバイルオンラインゲームの開発(クライアントサイド)
ハンズオンについて
このハンズオンの目的
■ 日本でのGo普及
● Goが流行れば仕事が増える
● きっとGoで仕事できる
■ Go Conferenceへ
● セッションの内容についていけるように
● なんとなく参加 → 勉強したいから参加
○ ドタキャン率を下...
今日作るもの
■ リポジトリ
● https://github.
com/tenntenn/gohandson/tree/master/imgconv/ja
■ コマンドラインツール
● ターミナルで動くプログラム
● 画像を変換するツール
#...
学べること
■ このハンズオンで学べること
● go getやGOPATHについて
● コマンドライン引数の取り方
● ファイルの扱い方
● 画像ファイルの扱い方
● flagパッケージの使い方
● 埋込み
● 画像処理の仕方
● golang...
学べないこと
■ このハンズオンで学べないこと
● Goの開発環境のインストール方法
● IDEやエディタの設定
● 基本的な文法
● ゴールーチンとチャネル
● net/httpパッケージ
ドキュメントとPlayground
ドキュメント
■ パッケージドキュメント
● https://golang.org/pkg
● 標準パッケージの使い方が書いてある
■ FAQ
● https://golang.org/doc/faq
● なぜGoに◯◯がないのか?など
■ 言...
Playground
■ Go Playground
● http://play.golang.org/
● Web上でGoを実行できる
● Share機能で、SNSで共有したり質問する
型・メソッド・インタフェース
typeを使った型の作成
■ シンプルで強力な type
// 組み込み型に名前をつける
type Int int
// 他のパッケージの型に名前をつける
type MyWriter io.Writer
// 型リテラルに名前をつける
type...
typeで名前が付けれるもの
■ 組み込み型
int、float64、string など
■ 型リテラル
構造体、インタフェース、
マップ、スライス、チャネル、関数 など
■ 名前付きの型
パッケージの内外で作った型
別の型として再定義できる
typeを使った型の作成
■ typeで作った型はレシーバにできる
type Hex int
func (h Hex) String() string {
return fmt.Sprintf(“%x”, int(h))
}
// 100をHe...
レシーバにできるもの
■ 名前のついた型
typeで定義したもの
■ パッケージ内の型のみ
外部のパッケージの型はtypeで再定義する
■ ポインタも含む
レシーバに変更を与えたい場合
レシーバも引数と同じ扱い
構造体以外もメソッドを持てる
インタフェース
■ 明示的に実装しなくてよい
// interface型の型リテラルにStringerという名前をつける
type Stringer interface {
// メソッドリストを書く
String() string
}
typ...
型とメソッドとインタフェース
■ 既存の型にもインタフェースを実装
● 後づけで実装させる
● メソッドリストさえ一致してればよい
■ 構造体以外も実装可能
● typeで宣言すればメソッドが設けられる
● メソッドリストさえ一致してればよい
io.Writerとio.Reader
■ 1つのメソッドしか持たない
● io.Writer: Writeメソッド
● io.Reader: Readメソッド
■ 標準パッケージで多く使われている
● fmt, net, bytes, enc...
埋込み
■ 構造体に匿名フィールドとして値を埋め込む
type Hoge struct {
N int
}
// Fuga型にHoge型を埋め込む
type Fuga struct {
Hoge // 名前のないフィールドになる
}
埋込み
■ 埋め込んだ値に移譲(継承ではない)
f := Fuga{Hoge{N:100}}
// Hoge型のフィールドにアクセスできる
fmt.Println(f.N)
// 型名を指定してアクセスできる
fmt.Println(f.Hog...
埋込みの特徴
■ 型リテラルでなければ埋め込められる
● typeで定義したものや組み込み型
● インタフェースも埋め込められる
■ インタフェースの実装
埋め込んだ値のメソッドもカウント
// Stringerを実装
type Hex int...
インタフェースと埋め込み
■ 既存のインタフェースの振る舞いを変える
type Hoge interface{M();N()}
type fuga struct {Hoge}
func (f fuga) M() {
fmt.Println(“H...
もう一歩先へ
ハンズオンが終わったら
■ 改造してみよう
● テストを書いてみよう
● 回転させてみよう
● 画像形式を増やそう
● gifアニメーションを作ろう
● 画像変換サーバにしよう
ハンズオンを開こう
■ ハンズオンを開催してほしい
● 資料はすでにある!
○ これからも増やしていきます
● 脱初心者で次の初心者を助けよう
● 教えるということは良い学びになる
● 身近なところでいいので
○ 会社、大学、コミュニティ
何か作って発表しよう
■ Go Conferenceに参加しよう
http://eventdots.jp/event/573121
Go初心者向けハンズオン コマンドラインツールを作ろう
Upcoming SlideShare
Loading in …5
×

Go初心者向けハンズオン コマンドラインツールを作ろう

13,236 views

Published on

http://gocon.connpass.com/event/21550/ の導入の資料です。

Published in: Technology

Go初心者向けハンズオン コマンドラインツールを作ろう

  1. 1. Go初心者向け ハンズオン コマンドラインツールを作ろう 2015/10/31(土) @Go初心者向けハンズオン The Go gopher was designed by Renee French. The gopher stickers was made by Takuya Ueda. Licensed under the Creative Commons 3.0 Attributions license.
  2. 2. アジェンダ ● 自己紹介 ● ハンズオンについて ● ドキュメントとPlayground ● 型・メソッド・インタフェース ● もう一歩先へ
  3. 3. 自己紹介 KLab株式会社 KLabGames事業本部 エンジニア 上田拓也 twitter: @tenntenn ■ 好きな言語 Go, JavaScript, Lua ■ 業務 モバイルオンラインゲームの開発(クライアントサイド)
  4. 4. ハンズオンについて
  5. 5. このハンズオンの目的 ■ 日本でのGo普及 ● Goが流行れば仕事が増える ● きっとGoで仕事できる ■ Go Conferenceへ ● セッションの内容についていけるように ● なんとなく参加 → 勉強したいから参加 ○ ドタキャン率を下げれたら嬉しい ● 発表者になってほしい
  6. 6. 今日作るもの ■ リポジトリ ● https://github. com/tenntenn/gohandson/tree/master/imgconv/ja ■ コマンドラインツール ● ターミナルで動くプログラム ● 画像を変換するツール # 50%に縮小して、JPEGにする $ imgconv -resize 50% a.png b.jpg
  7. 7. 学べること ■ このハンズオンで学べること ● go getやGOPATHについて ● コマンドライン引数の取り方 ● ファイルの扱い方 ● 画像ファイルの扱い方 ● flagパッケージの使い方 ● 埋込み ● 画像処理の仕方 ● golang.org/x/以下のパッケージについて ● テンプレートエンジンの使い方 ● ディレクトリを再帰的に処理する方法
  8. 8. 学べないこと ■ このハンズオンで学べないこと ● Goの開発環境のインストール方法 ● IDEやエディタの設定 ● 基本的な文法 ● ゴールーチンとチャネル ● net/httpパッケージ
  9. 9. ドキュメントとPlayground
  10. 10. ドキュメント ■ パッケージドキュメント ● https://golang.org/pkg ● 標準パッケージの使い方が書いてある ■ FAQ ● https://golang.org/doc/faq ● なぜGoに◯◯がないのか?など ■ 言語仕様 ● https://golang.org/ref/spec 公式ドキュメントを読もう!!
  11. 11. Playground ■ Go Playground ● http://play.golang.org/ ● Web上でGoを実行できる ● Share機能で、SNSで共有したり質問する
  12. 12. 型・メソッド・インタフェース
  13. 13. typeを使った型の作成 ■ シンプルで強力な type // 組み込み型に名前をつける type Int int // 他のパッケージの型に名前をつける type MyWriter io.Writer // 型リテラルに名前をつける type Person struct { Name string }
  14. 14. typeで名前が付けれるもの ■ 組み込み型 int、float64、string など ■ 型リテラル 構造体、インタフェース、 マップ、スライス、チャネル、関数 など ■ 名前付きの型 パッケージの内外で作った型 別の型として再定義できる
  15. 15. typeを使った型の作成 ■ typeで作った型はレシーバにできる type Hex int func (h Hex) String() string { return fmt.Sprintf(“%x”, int(h)) } // 100をHex型として代入 var hex Hex = 100 // Stringメソッドを呼び出す fmt.Println(hex.String()) intとHexは別の型として扱われる
  16. 16. レシーバにできるもの ■ 名前のついた型 typeで定義したもの ■ パッケージ内の型のみ 外部のパッケージの型はtypeで再定義する ■ ポインタも含む レシーバに変更を与えたい場合 レシーバも引数と同じ扱い 構造体以外もメソッドを持てる
  17. 17. インタフェース ■ 明示的に実装しなくてよい // interface型の型リテラルにStringerという名前をつける type Stringer interface { // メソッドリストを書く String() string } type Hex int // メソッドリストが一致してれば実装してることになる func (h Hex) String() string { return fmt.Sprintf(“%x”, int(h)) }
  18. 18. 型とメソッドとインタフェース ■ 既存の型にもインタフェースを実装 ● 後づけで実装させる ● メソッドリストさえ一致してればよい ■ 構造体以外も実装可能 ● typeで宣言すればメソッドが設けられる ● メソッドリストさえ一致してればよい
  19. 19. io.Writerとio.Reader ■ 1つのメソッドしか持たない ● io.Writer: Writeメソッド ● io.Reader: Readメソッド ■ 標準パッケージで多く使われている ● fmt, net, bytes, encoding, bufio, os ... ● ファイルやネットワークのコネクション ● 抽象度の高いインタフェース
  20. 20. 埋込み ■ 構造体に匿名フィールドとして値を埋め込む type Hoge struct { N int } // Fuga型にHoge型を埋め込む type Fuga struct { Hoge // 名前のないフィールドになる }
  21. 21. 埋込み ■ 埋め込んだ値に移譲(継承ではない) f := Fuga{Hoge{N:100}} // Hoge型のフィールドにアクセスできる fmt.Println(f.N) // 型名を指定してアクセスできる fmt.Println(f.Hoge.N) type Hoge struct {N int} type Fuga struct {Hoge}
  22. 22. 埋込みの特徴 ■ 型リテラルでなければ埋め込められる ● typeで定義したものや組み込み型 ● インタフェースも埋め込められる ■ インタフェースの実装 埋め込んだ値のメソッドもカウント // Stringerを実装 type Hex int func (h Hex) String() string { return fmt.Sprintf(“%x”, int(h)) } // Hex2もStringerを実装 type Hex2 struct {Hex} type Stringer interface { String() string }
  23. 23. インタフェースと埋め込み ■ 既存のインタフェースの振る舞いを変える type Hoge interface{M();N()} type fuga struct {Hoge} func (f fuga) M() { fmt.Println(“Hi”) f.Hoge.M() // 元のメソッドを呼ぶ } func HiHoge(h Hoge) Hoge { return fuga{h} // 構造体作る } Mの振る舞いを変える
  24. 24. もう一歩先へ
  25. 25. ハンズオンが終わったら ■ 改造してみよう ● テストを書いてみよう ● 回転させてみよう ● 画像形式を増やそう ● gifアニメーションを作ろう ● 画像変換サーバにしよう
  26. 26. ハンズオンを開こう ■ ハンズオンを開催してほしい ● 資料はすでにある! ○ これからも増やしていきます ● 脱初心者で次の初心者を助けよう ● 教えるということは良い学びになる ● 身近なところでいいので ○ 会社、大学、コミュニティ
  27. 27. 何か作って発表しよう ■ Go Conferenceに参加しよう http://eventdots.jp/event/573121

×