Location via proxy:
[ UP ]
[Report a bug]
[Manage cookies]
No cookies
No scripts
No ads
No referrer
Show this form
Submit Search
Go初心者向けハンズオン コマンドラインツールを作ろう
•
21 likes
•
14,617 views
Takuya Ueda
http://gocon.connpass.com/event/21550/ の導入の資料です。
Read less
Read more
1 of 28
Download now
Downloaded 35 times
More Related Content
Go初心者向けハンズオン コマンドラインツールを作ろう
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.
アジェンダ ● 自己紹介 ● ハンズオンについて ●
ドキュメントとPlayground ● 型・メソッド・インタフェース ● もう一歩先へ
3.
自己紹介 KLab株式会社 KLabGames事業本部 エンジニア 上田拓也 twitter: @tenntenn ■
好きな言語 Go, JavaScript, Lua ■ 業務 モバイルオンラインゲームの開発(クライアントサイド)
4.
ハンズオンについて
5.
このハンズオンの目的 ■ 日本でのGo普及 ● Goが流行れば仕事が増える ●
きっとGoで仕事できる ■ Go Conferenceへ ● セッションの内容についていけるように ● なんとなく参加 → 勉強したいから参加 ○ ドタキャン率を下げれたら嬉しい ● 発表者になってほしい
6.
今日作るもの ■ リポジトリ ● https://github. com/tenntenn/gohandson/tree/master/imgconv/ja ■
コマンドラインツール ● ターミナルで動くプログラム ● 画像を変換するツール # 50%に縮小して、JPEGにする $ imgconv -resize 50% a.png b.jpg
7.
学べること ■ このハンズオンで学べること ● go
getやGOPATHについて ● コマンドライン引数の取り方 ● ファイルの扱い方 ● 画像ファイルの扱い方 ● flagパッケージの使い方 ● 埋込み ● 画像処理の仕方 ● golang.org/x/以下のパッケージについて ● テンプレートエンジンの使い方 ● ディレクトリを再帰的に処理する方法
8.
学べないこと ■ このハンズオンで学べないこと ● Goの開発環境のインストール方法 ●
IDEやエディタの設定 ● 基本的な文法 ● ゴールーチンとチャネル ● net/httpパッケージ
9.
ドキュメントとPlayground
10.
ドキュメント ■ パッケージドキュメント ● https://golang.org/pkg ●
標準パッケージの使い方が書いてある ■ FAQ ● https://golang.org/doc/faq ● なぜGoに◯◯がないのか?など ■ 言語仕様 ● https://golang.org/ref/spec 公式ドキュメントを読もう!!
11.
Playground ■ Go Playground ●
http://play.golang.org/ ● Web上でGoを実行できる ● Share機能で、SNSで共有したり質問する
12.
型・メソッド・インタフェース
13.
typeを使った型の作成 ■ シンプルで強力な type //
組み込み型に名前をつける type Int int // 他のパッケージの型に名前をつける type MyWriter io.Writer // 型リテラルに名前をつける type Person struct { Name string }
14.
typeで名前が付けれるもの ■ 組み込み型 int、float64、string など ■
型リテラル 構造体、インタフェース、 マップ、スライス、チャネル、関数 など ■ 名前付きの型 パッケージの内外で作った型 別の型として再定義できる
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.
レシーバにできるもの ■ 名前のついた型 typeで定義したもの ■ パッケージ内の型のみ 外部のパッケージの型はtypeで再定義する ■
ポインタも含む レシーバに変更を与えたい場合 レシーバも引数と同じ扱い 構造体以外もメソッドを持てる
17.
インタフェース ■ 明示的に実装しなくてよい // interface型の型リテラルにStringerという名前をつける type
Stringer interface { // メソッドリストを書く String() string } type Hex int // メソッドリストが一致してれば実装してることになる func (h Hex) String() string { return fmt.Sprintf(“%x”, int(h)) }
18.
型とメソッドとインタフェース ■ 既存の型にもインタフェースを実装 ● 後づけで実装させる ●
メソッドリストさえ一致してればよい ■ 構造体以外も実装可能 ● typeで宣言すればメソッドが設けられる ● メソッドリストさえ一致してればよい
19.
io.Writerとio.Reader ■ 1つのメソッドしか持たない ● io.Writer:
Writeメソッド ● io.Reader: Readメソッド ■ 標準パッケージで多く使われている ● fmt, net, bytes, encoding, bufio, os ... ● ファイルやネットワークのコネクション ● 抽象度の高いインタフェース
20.
埋込み ■ 構造体に匿名フィールドとして値を埋め込む type Hoge
struct { N int } // Fuga型にHoge型を埋め込む type Fuga struct { Hoge // 名前のないフィールドになる }
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.
埋込みの特徴 ■ 型リテラルでなければ埋め込められる ● 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.
インタフェースと埋め込み ■ 既存のインタフェースの振る舞いを変える 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.
もう一歩先へ
25.
ハンズオンが終わったら ■ 改造してみよう ● テストを書いてみよう ●
回転させてみよう ● 画像形式を増やそう ● gifアニメーションを作ろう ● 画像変換サーバにしよう
26.
ハンズオンを開こう ■ ハンズオンを開催してほしい ● 資料はすでにある! ○
これからも増やしていきます ● 脱初心者で次の初心者を助けよう ● 教えるということは良い学びになる ● 身近なところでいいので ○ 会社、大学、コミュニティ
27.
何か作って発表しよう ■ Go Conferenceに参加しよう http://eventdots.jp/event/573121
Download