Soumettre la recherche
Mettre en ligne
Go初心者向けハンズオン コマンドラインツールを作ろう
•
21 j'aime
•
14,570 vues
Takuya Ueda
Suivre
http://gocon.connpass.com/event/21550/ の導入の資料です。
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 28
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
React-konvaで絵を描いてみる話
React-konvaで絵を描いてみる話
iPride Co., Ltd.
個人開発でゲーム一本完成させるまでの苦難の道のり 〜企画編〜
個人開発でゲーム一本完成させるまでの苦難の道のり 〜企画編〜
narumi_
UniRxでMV(R)Pパターンをやってみた
UniRxでMV(R)Pパターンをやってみた
torisoup
스타트업처럼 토이프로젝트하기
스타트업처럼 토이프로젝트하기
Sunyoung Shin
iOSでMVVM入門
iOSでMVVM入門
ishikawa akira
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
Amazon Web Services Japan
ライセンスを理解してますか?知っておきたいWordPressとGPLライセンス
ライセンスを理解してますか?知っておきたいWordPressとGPLライセンス
Jun Nogata
Contenu connexe
Tendances
多機能ボイチャを簡単に導入する方法
多機能ボイチャを簡単に導入する方法
Unity Technologies Japan K.K.
UniRxことはじめ
UniRxことはじめ
Shoichi Yasui
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
Teiichi Ota
C++からWebRTC (DataChannel)を利用する
C++からWebRTC (DataChannel)を利用する
祐司 伊藤
Magic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみた
NishoMatsusita
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
Akkaで分散システム入門
Akkaで分散システム入門
Shingo Omura
DeNAの大規模ライブ配信基盤を支える技術
DeNAの大規模ライブ配信基盤を支える技術
DeNA
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
Takafumi Yoshida
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
bonjin6770 Kurosawa
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
Takuya Ueda
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
Tokoroten Nakayama
【AWS初心者向けWebinar】AWSから始める動画配信
【AWS初心者向けWebinar】AWSから始める動画配信
Amazon Web Services Japan
CloudFront経由でのCORS利用
CloudFront経由でのCORS利用
Yuta Imai
Jenkins と groovy
Jenkins と groovy
Kohsuke Kawaguchi
オートモーティブ領域における 位置情報関連アルゴリズムあれこれ
オートモーティブ領域における 位置情報関連アルゴリズムあれこれ
DeNA
Golangにおける端末制御 リッチなターミナルUIの実現方法
Golangにおける端末制御 リッチなターミナルUIの実現方法
Masashi Shibata
Jetson x Azure ハンズオン DeepStream Azure IoT
Jetson x Azure ハンズオン DeepStream Azure IoT
Deep Learning Lab(ディープラーニング・ラボ)
Amazon FreeRTOSを用いた量産向けIoTマイコンデバイス開発プロトタイピング
Amazon FreeRTOSを用いた量産向けIoTマイコンデバイス開発プロトタイピング
Amazon Web Services Japan
Tendances
(20)
多機能ボイチャを簡単に導入する方法
多機能ボイチャを簡単に導入する方法
UniRxことはじめ
UniRxことはじめ
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
C++からWebRTC (DataChannel)を利用する
C++からWebRTC (DataChannel)を利用する
Magic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみた
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
Akkaで分散システム入門
Akkaで分散システム入門
DeNAの大規模ライブ配信基盤を支える技術
DeNAの大規模ライブ配信基盤を支える技術
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
【AWS初心者向けWebinar】AWSから始める動画配信
【AWS初心者向けWebinar】AWSから始める動画配信
CloudFront経由でのCORS利用
CloudFront経由でのCORS利用
Jenkins と groovy
Jenkins と groovy
オートモーティブ領域における 位置情報関連アルゴリズムあれこれ
オートモーティブ領域における 位置情報関連アルゴリズムあれこれ
Golangにおける端末制御 リッチなターミナルUIの実現方法
Golangにおける端末制御 リッチなターミナルUIの実現方法
Jetson x Azure ハンズオン DeepStream Azure IoT
Jetson x Azure ハンズオン DeepStream Azure IoT
Amazon FreeRTOSを用いた量産向けIoTマイコンデバイス開発プロトタイピング
Amazon FreeRTOSを用いた量産向けIoTマイコンデバイス開発プロトタイピング
Similaire à Go初心者向けハンズオン コマンドラインツールを作ろう
Google Assistant関係のセッションまとめ
Google Assistant関係のセッションまとめ
Takuya Ueda
粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法
Takuya Ueda
Cloud Functionsの紹介
Cloud Functionsの紹介
Takuya Ueda
Cloud functionsの紹介
Cloud functionsの紹介
Takuya Ueda
ゲーム開発出身者がチームラボで働いてみた
ゲーム開発出身者がチームラボで働いてみた
秀和 福永
Goでwebアプリを開発してみよう
Goでwebアプリを開発してみよう
Takuya Ueda
Goだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろう
Takuya Ueda
goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現する
Takuya Ueda
GoでMinecraftっぽいの作る
GoでMinecraftっぽいの作る
京大 マイコンクラブ
エンジニアになり1ヶ月が経って!
エンジニアになり1ヶ月が経って!
ssuserccd9f1
エディタの壁を越えるGoの開発ツールの文化と作成法
エディタの壁を越えるGoの開発ツールの文化と作成法
Takuya Ueda
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
Takuya Ueda
Go conference 2021 autumn
Go conference 2021 autumn
masahiko ito
WebAssembly with Go
WebAssembly with Go
Takuya Ueda
Goで始める言語処理系実装入門
Goで始める言語処理系実装入門
虎の穴 開発室
Don't need docker
Don't need docker
Go Yamada
気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会
Yu Shibatsuji
The History of Groovy #GroovyBase
The History of Groovy #GroovyBase
kyon mm
そうだ、Goを始めよう
そうだ、Goを始めよう
Takuya Ueda
MTプラグイン入門以前
MTプラグイン入門以前
Hiroshi Yamato
Similaire à Go初心者向けハンズオン コマンドラインツールを作ろう
(20)
Google Assistant関係のセッションまとめ
Google Assistant関係のセッションまとめ
粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法
Cloud Functionsの紹介
Cloud Functionsの紹介
Cloud functionsの紹介
Cloud functionsの紹介
ゲーム開発出身者がチームラボで働いてみた
ゲーム開発出身者がチームラボで働いてみた
Goでwebアプリを開発してみよう
Goでwebアプリを開発してみよう
Goだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろう
goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現する
GoでMinecraftっぽいの作る
GoでMinecraftっぽいの作る
エンジニアになり1ヶ月が経って!
エンジニアになり1ヶ月が経って!
エディタの壁を越えるGoの開発ツールの文化と作成法
エディタの壁を越えるGoの開発ツールの文化と作成法
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
Go conference 2021 autumn
Go conference 2021 autumn
WebAssembly with Go
WebAssembly with Go
Goで始める言語処理系実装入門
Goで始める言語処理系実装入門
Don't need docker
Don't need docker
気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会
The History of Groovy #GroovyBase
The History of Groovy #GroovyBase
そうだ、Goを始めよう
そうだ、Goを始めよう
MTプラグイン入門以前
MTプラグイン入門以前
Plus de Takuya Ueda
Goにおけるバージョン管理の必要性 − vgoについて −
Goにおけるバージョン管理の必要性 − vgoについて −
Takuya Ueda
GAE/Goとsyncパッケージ
GAE/Goとsyncパッケージ
Takuya Ueda
静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発
Takuya Ueda
マスター・オブ・goパッケージ
マスター・オブ・goパッケージ
Takuya Ueda
メルカリ カウルのマスタデータの更新
メルカリ カウルのマスタデータの更新
Takuya Ueda
Go1.8 for Google App Engine
Go1.8 for Google App Engine
Takuya Ueda
Go Friday 傑作選
Go Friday 傑作選
Takuya Ueda
GoによるiOSアプリの開発
GoによるiOSアプリの開発
Takuya Ueda
Static Analysis in Go
Static Analysis in Go
Takuya Ueda
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
Takuya Ueda
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
エキスパートGo
エキスパートGo
Takuya Ueda
Go静的解析ハンズオン
Go静的解析ハンズオン
Takuya Ueda
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
Takuya Ueda
Gopher Fest 2017参加レポート
Gopher Fest 2017参加レポート
Takuya Ueda
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
Takuya Ueda
Namespace API を用いたマルチテナント型 Web アプリの実践
Namespace API を用いたマルチテナント型 Web アプリの実践
Takuya Ueda
Mobile Apps by Pure Go with Reverse Binding
Mobile Apps by Pure Go with Reverse Binding
Takuya Ueda
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
Takuya Ueda
GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門
Takuya Ueda
Plus de Takuya Ueda
(20)
Goにおけるバージョン管理の必要性 − vgoについて −
Goにおけるバージョン管理の必要性 − vgoについて −
GAE/Goとsyncパッケージ
GAE/Goとsyncパッケージ
静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発
マスター・オブ・goパッケージ
マスター・オブ・goパッケージ
メルカリ カウルのマスタデータの更新
メルカリ カウルのマスタデータの更新
Go1.8 for Google App Engine
Go1.8 for Google App Engine
Go Friday 傑作選
Go Friday 傑作選
GoによるiOSアプリの開発
GoによるiOSアプリの開発
Static Analysis in Go
Static Analysis in Go
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
エキスパートGo
エキスパートGo
Go静的解析ハンズオン
Go静的解析ハンズオン
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
Gopher Fest 2017参加レポート
Gopher Fest 2017参加レポート
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
Namespace API を用いたマルチテナント型 Web アプリの実践
Namespace API を用いたマルチテナント型 Web アプリの実践
Mobile Apps by Pure Go with Reverse Binding
Mobile Apps by Pure Go with Reverse Binding
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門
Dernier
2024 03 CTEA
2024 03 CTEA
arts yokohama
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
Tetsuya Nihonmatsu
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
ssuser539845
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
Ayachika Kitazaki
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
ssuser370dd7
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
Matsushita Laboratory
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
2024 04 minnanoito
2024 04 minnanoito
arts yokohama
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
Shumpei Kishi
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
arts yokohama
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
arts yokohama
Dernier
(11)
2024 03 CTEA
2024 03 CTEA
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
2024 04 minnanoito
2024 04 minnanoito
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
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
Télécharger maintenant