SlideShare ist ein Scribd-Unternehmen logo
1 von 56
Downloaden Sie, um offline zu lesen
今日から始める
Go言語 と appengine
2014/01/24@FFTT勉強会
inoue
Introduction	
• 今日なにやるの?
- Go言語 で appengine を始めてみよう
- appengine でGo言語を始めてみよう
- 何かしら動くものを作ってみます
- 今日からすぐにやってみよう、という気持ちに
なってもらえれば!
Do you know golang?
• 2009年11月10日(米国時間)に Google よりリリース。OSS
• Simple
• コンパイル・実行速度が速い
• タイプセーフかつメモリセーフ
• 並行処理の記述が容易にできる(goroutine)
• Google トレンド急上昇中
• 「2014年 プログラミング大予測」(日経ソフトウェア2014年2
月号特集)にて「Go言語 のキャズム超え」を挙げる方も
(@t_wada)
Do you know appengine?
• 正式名称「Google App Engine」(略称GAE)
• Google 謹製の PaaS、プログラムを書いてデプロイするだけで
全世界に公開!
• AutoScaling
• KVS(Datastore)
• 小さなアプリであれば無料枠運用も可能
- AWSのような「1年間無料」とかではなく、各アプリごとに
無料で使える範囲が設定されている
- http[s]://<app-id>.appspot.com/
- 私もいくつかのアプリを運用しほったらかしています
Why start appengine with golang?
• spin-up は appengine の特徴のうちの一つ
- (捌き切れない)リクエストが来たら、新しいインスタンスを立ち上げ
る(=AutoScaling)
- これがJavaとかだと無茶苦茶遅い(∼数秒)
• Python, Java, PHP の他、Go のサポートを開始
• Go だと spin-up はチョー速い(∼数十ミリ秒)
• 「並列処理を書きやすい」のも、appengine アプリを書くのに適してる
- appengine の色んな機能を call するときの I/O 待ちを最小化
• appengine やるなら Go で、でしょ!状態
- (※まだexperimentalです)
Agenda
1. Introduction
i. Do you know golang?
ii. Do you know appengine?
iii. Why start appengine with golang?
2. About golang specification
3. Live developing
4. まとめ
About golang specification	
• まずは言語仕様から軽く・・・
• A Tour of Go
- http://tour.golang.org/
- 実行するコードは、golang.org サーバ上のGo Playgroundで動作
- 受けたGoコードをサーバでコンパイル・リンク・実行し、そして
その結果を返してくれる
• A Tour of Go (jp)
- http://go-tour-jp.appspot.com/
- 今日はここから要所をピックアップすることにします
- 数が多いので巻き気味でいきます
About golang specification
#1) Hello World
About golang specification
#4) Packages
• プログラムの動作の始点は main パッケージ内
• パッケージ名はインポートパスの最後の要素と同じになる
- “math/rand” パッケージに属するプログラムは、
“package rand” から始まるコード群で構成される
About golang specification
#6) Exported names
• パッケージをインポートすると、そのパッケージが外部に
公開(エクスポート)している名前(変数や関数)を参照
することが可能
- 名前の最初が大文字で始まる場合はエクスポートされる
- Hoge ならエクスポートされるが、 hoge だとされない
About golang specification
#7, 8, 9, 10) About Functions
• 引数定義では、型が変数名の後にくるので注意。戻り値の型は引数定義の後ろに
• 2つ以上の関数の引数が同じ型である場合には、最後の型だけ書くことができる
• 複数の戻り値を返すことが可能
• 戻り値にもパラメータを取ることも可能(その場合、return だけ書けば良い)
About golang specification
#11, 12, 13) Variables
• var ステートメントで変数を宣言
• 2つ以上連続した変数の型が同じなら、最後に一回だけ書けばOK(関数の引数
リストと同じ)
• 変数一つ一つに initializer を与えることも可能。その場合、型は省略できる
• := を用いることで暗黙的な型宣言も可能
- Ruby でいう ||= に似てるなー
About golang specification
#14) Basic types
• Go の基本型は以下。
- bool
- string
- int int8 int16 int32 int64
- uint uint8 uint16 uint32 uint64 uintptr
- byte
- rune
- float32 float64
- complex64 complex128
About golang specification
#15) Constants
• 定数は、キーワード const を使って宣言
• character、string、boolean、数値(numeric)のみで宣言
可能
• := を使っての宣言は不可
About golang specification
#17, 18, 19, 20) For
• Go でのループ処理に使えるのは for ループだけ、while はない
• 括弧 ( ) はつけてはならない。中括弧 { } は必要
• 条件の前後は空にできるし、セミコロンを抜くこともできる … これが Go
での while!
• 条件を省略すれば無限ループに
About golang specification
#21, 22, 23) If
• 括弧 ( ) はつけてはならない、中括弧 { } は必要
• 条件式の前に短いステートメントを記述することができる
- ここで宣言された変数は、else ブロック内でも使える
About golang specification
#25, 26) Structs
• struct(構造体)というものがある
• フィールドにはドットを用いてアクセス
About golang specification
#27, 29) Pointers, The new function
• new(T) と書くと、ゼロ初期化した T の値をメモリに割り当て、その
ポインタを返す
- Go にはポインタがある(ポインタ演算はない)
- 構造体のフィールドは、構造体のポインタを通してもアクセスでき
る
About golang specification
#30, 31, 32) Slices
• 配列変数は配列全体。スライスとは、ある配列内の連続した領域への参照のこと
• make 関数を使って生成:ゼロ初期化した配列をメモリに割り当て、その参照が
生成される
About golang specification
#34, 35) Range
• slice などの要素ひとつずつを反復処理するのに使える
• i はインデックス。その後ろに変数を置くと値が取れる
• インデックスや値の代入先をアンスコ”_”にすることで、
破棄することも可能
About golang specification
#37, 38, 39, 40) Maps
• 連想配列。make関数 で作成
• キーが存在するかどうかは、2つ目の戻り値を受け取ることで確認
- map m に key があれば、 ok は true になる
- なかった場合、ok は false になり、 v は、map の要素の型のゼロの値
になる
About golang specification
#42, 43) Function
• 関数も値として扱える
- 関数そのものを変数に代入できる
• Go の関数はクロージャだそうです
- クロージャ:関数閉包。引数以外の変数を自身のスコープにおいて解決する関数オブジェクト
- pos, neg の各クロージャは、自身の変数 sum へアクセスして変更できる(「sum にバインド
されている」)
About golang specification
#45, 46) Switch
• 上から下に評価。一致したところから下は評価されない
• 各 case の最後で break する
- Java とかだと、case 文を実行した後でも switch 文全体の処理から抜けず
に次の case の判定を行う
- fallthrough 文を case の最後に記述すれば、 Java とかと同じ挙動に
About golang specification
#50, 51) Methods
• メソッドの定義は、任意の type に対してのメソッドレシーバを定義
することで行える(Go にはクラスの仕組みがない)
- Vertex に対して Abs() が呼び出されたら func Abs() が実行される
- 他のパッケージからの型や基本型にはメソッドを定義できない
About golang specification
#52) Methods with pointer receivers
• メソッドレシーバは、ポインタ型でも値型でも書ける
• pointer receiver を使うことで、各メソッド呼び出しで値をコピーするのを回避
(元の値を変更)できる
• Scale メソッドが value receiver だった場合、元の値を変更することができない
(元の値のコピーに対する操作になる)
About golang specification
#53) Interfaces
• インターフェース型は、メソッド群として定義される。
• そのインターフェース型の値は、それらのメソッドを実
装する任意の値、となる
About golang specification
#55) Errors
• エラーを表す際には、組込みのインターフェース型の error を使う
• 文字列を返す Error メソッドを実装しておく
• fmt パッケージの各種表示ルーチンは、error 型を渡された場合、自動的に
Error メソッドを呼び出す
About golang specification
#63) Goroutines
• “goroutine” は、いわゆるスレッド(軽量)
• “go f(x, y, z)” と書けば、関数 f は新しい goroutine 上で実行される
• x, y, z の評価は現在の goroutine(スレッド)で評価され、新しい
goroutine で実行されるのは、関数 f
• goroutine は同じアドレス空間で実行されるため、共有メモリへの
アクセスは、きちんと同期する必要がある…
About golang specification
#64, 65) Channels
• goroutine 間での通信には channel を用いる
• ch <- hoge で、hoge をチャネル ch に送る
• fuga <- ch で、チャネル ch から fuga を受信する
• チャネルも make 関数で作る。2つ目の引数にバッファ長を与えられる
(チャネルはバッファ可能)
About golang specification
#66) Range and Close
• 送り手は、これ以上の送信する値がないことを示すためにチャネル
を close できる
• for i := range c と書けば、チャネルが閉じられるまで、繰り返し
チャネルから値を受信できる
もう言語仕様はこれくらいにして…
Live Developing	
• せっかくなので、Webアプリっぽい挙動をするものを
- なおかつ、勉強会の時間内で完成するようなもの
- Mashupなかんじで、「はてなスターチェッカー」を
作る!
- http://developer.hatena.ne.jp/ja/documents/star/
apis/count
• Googleアカウントを作るところからやりますので、みな
さんもぜひ、おうちでやってみてください!
Live developing
#1) install golang
• $ brew install go
• python 2.7.x 以上が必要とのこと
- $ python --version
• 作業を行うロケーションを GOPATH として設定しておくと
便利って誰かが言ってた
- $ mkdir $HOME/go
- $ export GOPATH=$HOME/go
• さらに bin サブディレクトリにもPATHを通しておくと便利
らしいけど appengine 開発にはあまり関係ないかも
- $ export PATH=$PATH:$GOPATH/bin
Live developing
#2) Download appengine SDK
• https://developers.google.com/appengine/
downloads?hl=ja にいく
• 「Google App Engine SDK for Go」がちゃんとあるの
で、ダウンロード
• 適当なところに展開
• 展開してできたディレクトリを PATH に通しておく
- $ export PATH=$PATH:$GOPATH/go_appengine
Live developing
#3) Hello World (1)
• 公式チュートリアルのHello Worldをやってみましょう
- https://developers.google.com/appengine/docs/go/
gettingstarted/helloworld
• $ cd $GOPATH
• $ mkdir -p workspace/hello
• $ cd workspace/hello
Live developing
#3) Hello World (2)
• hello.go を作る
Live developing
#3) Hello World (3)
• 設定ファイル app.yaml を書く
• hello.go と同じ階層でOK
Live developing
#3) Hello World (4)
• ローカルでサーバを立ち上げてみる
- $ goapp serve .
• http://localhost:8080 にアクセスしてみる
- 上のような画面が表示されたらOK
Live developing
#4) Take an Google Account (1)
• http://appengine.google.com/ にいく
• 「アカウントを作成」しましょう
Live developing
#5) create appengine application (1)
• 「Create Application」ボタンを押せば appengineアプ
リケーションの作成が始まります
• 電話認証が必要な場合があります
Live developing
#5) create appengine application (2)
• 「Application Identifier」には、世界でユニークなアプリケーション識別子
を入力します(これは覚えておこう)
• 「Application Title」は、自分がわかるような文字列ならなんでもOK
• その他もそのままでOK
• 1アカウントで10アプリまで作れます
Live developing
#5) create appengine application (3)
• Congraturations !!
Live developing
#6) Deploy Application to appengine (1)
• 先ほどの Hello World をデプロイしてみましょう
- $ goapp deploy .
• GMailアドレスとパスワードを聞かれます
• もしデプロイに失敗したりした場合、前回のデプロイ作
業をロールバックさせる必要があります
- $ $GOPATH/go_appengine/appcfg.py rollback .
Live developing
#6) Deploy Application to appengine (2)
• デプロイが完了したら、先ほど覚えておいたアプリケーショ
ン識別子を下記URLに当てはめてアクセス!
- http://<application-identifier>.appspot.com/
• さきほどのローカル実行時と同じ画面が表示されたら、
Congraturations !!
• いま、あなたの Hello World は全世界に公開されました!
Live developing
#7) Develop “star-checker” (1)
• では、このHello Worldをベースに、本来の目的の「はてな
スターチェッカー」を作ってみましょう
• まずはルーティングを追加・変更します
Live developing
#7) Develop “star-checker” (2)
• チェック結果(APIからのレスポンス)を表す struct を
作成します
• 変数名を大文字にして、Export可能にしておきます
Live developing
#7) Develop “star-checker” (3)
• htmlのテンプレートを作りましょう
• ちゃんとしたWebアプリをつくるときは、普通にhtmlを
置いてAjaxでDOM操作するとか…
Live developing
#7) Develop “star-checker” (4)
• トップページのルーティングハンドラを作りましょう
- いまあるハンドラは消しちゃいましょう
- 初期表示としては空っぽの結果表示をしておくことにしましょう、
そのために、空の StarReport をテンプレートに食わせときましょう
Live developing
#7) Develop “star-checker” (5)
• APIのレスポンスは JSON なので、それを parse する メソッドを定義
- StarReport に JsonProc というメソッドレシーバを定義する形
- JSON の parse 処理は今回の本質ではないので、さらっと
Live developing
#7) Develop “star-checker” (6)
• 最後に、チェックボタンをsubmitされたときのルーティングハンドラを作りましょう
- WebAPIを、appengine 上のアプリケーションからリクエストする際には、
appengine の「URL Fetch」というAPIを用います
- appengine の機能を利用する際には、予め context を取得しておく必要があります
- (続きます)
Live developing
#7) Develop “star-checker” (7)
• 続きです
- APIのレスポンスの body を ioutil.ReadAll で取得します
- defer : これを実行した関数がリターンする直前に、defer で指定した
関数の呼び出しが行われるようにスケジューリングしてくれる
- (さらに続きます)
Live developing
#7) Develop “star-checker” (8)
• さらに続きです
- string( hoge ) で、文字列に変換
- さっきのメソッドレシーバにより、parse された内容は report に
- その report をテンプレートに食わすと…
Live developing
#8) Congraturations!!
• できたっ!!
- あとはこれをもう一度デプロイすれば、Webアプリ「はてなスター
チェッカー」の全世界へのリリースが完了です!
- スターの数がわりと少ないのは、バグではないです。
Live developing
#9) Appendix
• コード全文は下記にて公開しております
- https://github.com/a-know/star_checker
• Goの言語仕様をざっと見てみました
• 実際にHello World と はてなスターチェッカー のふたつ
のアプリを書いてみました
• appengine にデプロイしてみました
• 言語はやっぱり使っていかないと習得できない!けど、
appengineはそれにじゅうぶん応えてくれる(勉強目的
くらいならタダで使える)プラットフォームだよ!
まとめ
今日から始めましょう!
Go言語 と appengine !!
完

Weitere ähnliche Inhalte

Was ist angesagt?

ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方Yosuke Furukawa
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?Takuya Ueda
 
Goでwebアプリを開発してみよう
Goでwebアプリを開発してみようGoでwebアプリを開発してみよう
Goでwebアプリを開発してみようTakuya Ueda
 
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法Takuya Ueda
 
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolangFINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolangYoshiki Shibukawa
 
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうGoで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうEsehara Shigeo
 
エディタの壁を越えるGoの開発ツールの文化と作成法
エディタの壁を越えるGoの開発ツールの文化と作成法エディタの壁を越えるGoの開発ツールの文化と作成法
エディタの壁を越えるGoの開発ツールの文化と作成法Takuya Ueda
 
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用Takuya Ueda
 
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろうGo mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろうTakuya Ueda
 
Go言語でBot開発やってみた
Go言語でBot開発やってみたGo言語でBot開発やってみた
Go言語でBot開発やってみたAkihiko Horiuchi
 
マスター・オブ・goパッケージ
マスター・オブ・goパッケージマスター・オブ・goパッケージ
マスター・オブ・goパッケージTakuya Ueda
 
静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発Takuya Ueda
 
Go静的解析ハンズオン
Go静的解析ハンズオンGo静的解析ハンズオン
Go静的解析ハンズオンTakuya Ueda
 
Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発Takuya Ueda
 
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 SummerGoのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 SummerHirokazu Fukami
 
Gopher Fest 2017参加レポート
Gopher Fest 2017参加レポートGopher Fest 2017参加レポート
Gopher Fest 2017参加レポートTakuya Ueda
 
エキスパートGo
エキスパートGoエキスパートGo
エキスパートGoTakuya Ueda
 
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2Takuya Ueda
 

Was ist angesagt? (20)

ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
 
Goでwebアプリを開発してみよう
Goでwebアプリを開発してみようGoでwebアプリを開発してみよう
Goでwebアプリを開発してみよう
 
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
 
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolangFINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
 
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうGoで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろう
 
エディタの壁を越えるGoの開発ツールの文化と作成法
エディタの壁を越えるGoの開発ツールの文化と作成法エディタの壁を越えるGoの開発ツールの文化と作成法
エディタの壁を越えるGoの開発ツールの文化と作成法
 
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
 
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろうGo mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
 
Go言語でBot開発やってみた
Go言語でBot開発やってみたGo言語でBot開発やってみた
Go言語でBot開発やってみた
 
Goとテスト
GoとテストGoとテスト
Goとテスト
 
マスター・オブ・goパッケージ
マスター・オブ・goパッケージマスター・オブ・goパッケージ
マスター・オブ・goパッケージ
 
静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発
 
Go静的解析ハンズオン
Go静的解析ハンズオンGo静的解析ハンズオン
Go静的解析ハンズオン
 
Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発
 
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 SummerGoのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
 
Gopher Fest 2017参加レポート
Gopher Fest 2017参加レポートGopher Fest 2017参加レポート
Gopher Fest 2017参加レポート
 
エキスパートGo
エキスパートGoエキスパートGo
エキスパートGo
 
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
 
Goをえらんだ理由
Goをえらんだ理由Goをえらんだ理由
Goをえらんだ理由
 

Andere mochten auch

Go言語のフレームワークRevelの紹介とサービスにおける活用事例
Go言語のフレームワークRevelの紹介とサービスにおける活用事例Go言語のフレームワークRevelの紹介とサービスにおける活用事例
Go言語のフレームワークRevelの紹介とサービスにおける活用事例Yuji Otani
 
運用自動化のためのプログラミング言語の作り方
運用自動化のためのプログラミング言語の作り方運用自動化のためのプログラミング言語の作り方
運用自動化のためのプログラミング言語の作り方Kenta Hattori
 
インフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LTインフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LTDaisuke Ikeda
 
マスター・オブ・Reflectパッケージ
マスター・オブ・Reflectパッケージマスター・オブ・Reflectパッケージ
マスター・オブ・ReflectパッケージTakuya Ueda
 
AndroidのUXアンチパターンについて
AndroidのUXアンチパターンについてAndroidのUXアンチパターンについて
AndroidのUXアンチパターンについてMakoto Matsuoka
 
Unlimited Frameworks
Unlimited FrameworksUnlimited Frameworks
Unlimited FrameworksTerui Masashi
 
Log解析の超入門
Log解析の超入門Log解析の超入門
Log解析の超入門菊池 佑太
 
形式手法で捗る!インフラ構成の設計と検証
形式手法で捗る!インフラ構成の設計と検証形式手法で捗る!インフラ構成の設計と検証
形式手法で捗る!インフラ構成の設計と検証y_taka_23
 
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使うGAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使うTakuya Ueda
 
Chrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみるChrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみるMasakazu Muraoka
 
Go言語と過ごした一週間
Go言語と過ごした一週間Go言語と過ごした一週間
Go言語と過ごした一週間Shintaro Kitayama
 
Golang, make and robotics #gocon
Golang, make and robotics #goconGolang, make and robotics #gocon
Golang, make and robotics #goconHideyuki TAKEI
 
alphawing meets heroku
alphawing meets herokualphawing meets heroku
alphawing meets herokuKyosuke Kameda
 
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)deris0126
 
Eureka go 2015_12_12
Eureka go 2015_12_12Eureka go 2015_12_12
Eureka go 2015_12_12matsuo kenji
 

Andere mochten auch (20)

Go言語のフレームワークRevelの紹介とサービスにおける活用事例
Go言語のフレームワークRevelの紹介とサービスにおける活用事例Go言語のフレームワークRevelの紹介とサービスにおける活用事例
Go言語のフレームワークRevelの紹介とサービスにおける活用事例
 
運用自動化のためのプログラミング言語の作り方
運用自動化のためのプログラミング言語の作り方運用自動化のためのプログラミング言語の作り方
運用自動化のためのプログラミング言語の作り方
 
インフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LTインフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LT
 
マスター・オブ・Reflectパッケージ
マスター・オブ・Reflectパッケージマスター・オブ・Reflectパッケージ
マスター・オブ・Reflectパッケージ
 
AndroidのUXアンチパターンについて
AndroidのUXアンチパターンについてAndroidのUXアンチパターンについて
AndroidのUXアンチパターンについて
 
Unlimited Frameworks
Unlimited FrameworksUnlimited Frameworks
Unlimited Frameworks
 
Log解析の超入門
Log解析の超入門Log解析の超入門
Log解析の超入門
 
形式手法で捗る!インフラ構成の設計と検証
形式手法で捗る!インフラ構成の設計と検証形式手法で捗る!インフラ構成の設計と検証
形式手法で捗る!インフラ構成の設計と検証
 
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使うGAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使う
 
HighBatch
HighBatchHighBatch
HighBatch
 
Go+revel
Go+revelGo+revel
Go+revel
 
Chrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみるChrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみる
 
Go言語と過ごした一週間
Go言語と過ごした一週間Go言語と過ごした一週間
Go言語と過ごした一週間
 
Goを知る
Goを知るGoを知る
Goを知る
 
らくちん Go言語
らくちん Go言語らくちん Go言語
らくちん Go言語
 
Github第8章
Github第8章Github第8章
Github第8章
 
Golang, make and robotics #gocon
Golang, make and robotics #goconGolang, make and robotics #gocon
Golang, make and robotics #gocon
 
alphawing meets heroku
alphawing meets herokualphawing meets heroku
alphawing meets heroku
 
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
 
Eureka go 2015_12_12
Eureka go 2015_12_12Eureka go 2015_12_12
Eureka go 2015_12_12
 

Ähnlich wie 今日から始める Go言語 と appengine

今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋Takuya Ueda
 
goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現するgoパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現するTakuya Ueda
 
Tizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native apiTizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native apiNaruto TAKAHASHI
 
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜Megagon Labs
 
Go言語ってどんな言語? 導入実績や気になるトレンド
Go言語ってどんな言語? 導入実績や気になるトレンドGo言語ってどんな言語? 導入実績や気になるトレンド
Go言語ってどんな言語? 導入実績や気になるトレンドAtsushi Yasuda
 
Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementationsmasahitojp
 
Easy scripting in Go
Easy scripting in GoEasy scripting in Go
Easy scripting in Gonaoty_bot
 
Go一緒にいかが?
Go一緒にいかが?Go一緒にいかが?
Go一緒にいかが?Ryuji Iwata
 
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラインフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラsusumu tanaka
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識Katsuhiro Morishita
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Hiro Yoshioka
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!Masaki Muranaka
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGUehara Junji
 
OSSで楽に作るGo言語クライアントツール
OSSで楽に作るGo言語クライアントツールOSSで楽に作るGo言語クライアントツール
OSSで楽に作るGo言語クライアントツールTano Makoto
 
PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGPythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGJun Okazaki
 

Ähnlich wie 今日から始める Go言語 と appengine (20)

今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
 
goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現するgoパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現する
 
Tizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native apiTizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native api
 
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
 
Go言語ってどんな言語? 導入実績や気になるトレンド
Go言語ってどんな言語? 導入実績や気になるトレンドGo言語ってどんな言語? 導入実績や気になるトレンド
Go言語ってどんな言語? 導入実績や気になるトレンド
 
Google Product
Google ProductGoogle Product
Google Product
 
Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementations
 
Easy scripting in Go
Easy scripting in GoEasy scripting in Go
Easy scripting in Go
 
Golang handson
Golang handsonGolang handson
Golang handson
 
appengine活用事例資料@TDDBC札幌2.1
appengine活用事例資料@TDDBC札幌2.1appengine活用事例資料@TDDBC札幌2.1
appengine活用事例資料@TDDBC札幌2.1
 
Go一緒にいかが?
Go一緒にいかが?Go一緒にいかが?
Go一緒にいかが?
 
0621 ndk game
0621 ndk game0621 ndk game
0621 ndk game
 
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラインフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
 
OSSで楽に作るGo言語クライアントツール
OSSで楽に作るGo言語クライアントツールOSSで楽に作るGo言語クライアントツール
OSSで楽に作るGo言語クライアントツール
 
PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGPythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEG
 

Mehr von a know

Pixela introduction document - builderscon 2019
Pixela introduction document - builderscon 2019Pixela introduction document - builderscon 2019
Pixela introduction document - builderscon 2019a know
 
"草APIサービス" Pixela を作った話
"草APIサービス" Pixela を作った話"草APIサービス" Pixela を作った話
"草APIサービス" Pixela を作った話a know
 
セールスエンジニアとして今後身につけていきたい技術
セールスエンジニアとして今後身につけていきたい技術セールスエンジニアとして今後身につけていきたい技術
セールスエンジニアとして今後身につけていきたい技術a know
 
私の「キャリアキーノート」
私の「キャリアキーノート」私の「キャリアキーノート」
私の「キャリアキーノート」a know
 
Mackerel の standard プランを個人利用している話
Mackerel の standard プランを個人利用している話Mackerel の standard プランを個人利用している話
Mackerel の standard プランを個人利用している話a know
 
「お手軽な機械学習サービス」で、ルーティンワークに立ち向かおう!
「お手軽な機械学習サービス」で、ルーティンワークに立ち向かおう!「お手軽な機械学習サービス」で、ルーティンワークに立ち向かおう!
「お手軽な機械学習サービス」で、ルーティンワークに立ち向かおう!a know
 
フィードフォースと AWS と私
フィードフォースと AWS と私フィードフォースと AWS と私
フィードフォースと AWS と私a know
 
サンタソン【サンタは俺らに何もくれない!だったら、俺らでアプリを作ろう】
サンタソン【サンタは俺らに何もくれない!だったら、俺らでアプリを作ろう】サンタソン【サンタは俺らに何もくれない!だったら、俺らでアプリを作ろう】
サンタソン【サンタは俺らに何もくれない!だったら、俺らでアプリを作ろう】a know
 
はじめよう JavaFX 2.x
はじめよう JavaFX 2.xはじめよう JavaFX 2.x
はじめよう JavaFX 2.xa know
 
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)a know
 

Mehr von a know (10)

Pixela introduction document - builderscon 2019
Pixela introduction document - builderscon 2019Pixela introduction document - builderscon 2019
Pixela introduction document - builderscon 2019
 
"草APIサービス" Pixela を作った話
"草APIサービス" Pixela を作った話"草APIサービス" Pixela を作った話
"草APIサービス" Pixela を作った話
 
セールスエンジニアとして今後身につけていきたい技術
セールスエンジニアとして今後身につけていきたい技術セールスエンジニアとして今後身につけていきたい技術
セールスエンジニアとして今後身につけていきたい技術
 
私の「キャリアキーノート」
私の「キャリアキーノート」私の「キャリアキーノート」
私の「キャリアキーノート」
 
Mackerel の standard プランを個人利用している話
Mackerel の standard プランを個人利用している話Mackerel の standard プランを個人利用している話
Mackerel の standard プランを個人利用している話
 
「お手軽な機械学習サービス」で、ルーティンワークに立ち向かおう!
「お手軽な機械学習サービス」で、ルーティンワークに立ち向かおう!「お手軽な機械学習サービス」で、ルーティンワークに立ち向かおう!
「お手軽な機械学習サービス」で、ルーティンワークに立ち向かおう!
 
フィードフォースと AWS と私
フィードフォースと AWS と私フィードフォースと AWS と私
フィードフォースと AWS と私
 
サンタソン【サンタは俺らに何もくれない!だったら、俺らでアプリを作ろう】
サンタソン【サンタは俺らに何もくれない!だったら、俺らでアプリを作ろう】サンタソン【サンタは俺らに何もくれない!だったら、俺らでアプリを作ろう】
サンタソン【サンタは俺らに何もくれない!だったら、俺らでアプリを作ろう】
 
はじめよう JavaFX 2.x
はじめよう JavaFX 2.xはじめよう JavaFX 2.x
はじめよう JavaFX 2.x
 
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
 

Kürzlich hochgeladen

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Kürzlich hochgeladen (10)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

今日から始める Go言語 と appengine

  • 2. Introduction • 今日なにやるの? - Go言語 で appengine を始めてみよう - appengine でGo言語を始めてみよう - 何かしら動くものを作ってみます - 今日からすぐにやってみよう、という気持ちに なってもらえれば!
  • 3. Do you know golang? • 2009年11月10日(米国時間)に Google よりリリース。OSS • Simple • コンパイル・実行速度が速い • タイプセーフかつメモリセーフ • 並行処理の記述が容易にできる(goroutine) • Google トレンド急上昇中 • 「2014年 プログラミング大予測」(日経ソフトウェア2014年2 月号特集)にて「Go言語 のキャズム超え」を挙げる方も (@t_wada)
  • 4. Do you know appengine? • 正式名称「Google App Engine」(略称GAE) • Google 謹製の PaaS、プログラムを書いてデプロイするだけで 全世界に公開! • AutoScaling • KVS(Datastore) • 小さなアプリであれば無料枠運用も可能 - AWSのような「1年間無料」とかではなく、各アプリごとに 無料で使える範囲が設定されている - http[s]://<app-id>.appspot.com/ - 私もいくつかのアプリを運用しほったらかしています
  • 5. Why start appengine with golang? • spin-up は appengine の特徴のうちの一つ - (捌き切れない)リクエストが来たら、新しいインスタンスを立ち上げ る(=AutoScaling) - これがJavaとかだと無茶苦茶遅い(∼数秒) • Python, Java, PHP の他、Go のサポートを開始 • Go だと spin-up はチョー速い(∼数十ミリ秒) • 「並列処理を書きやすい」のも、appengine アプリを書くのに適してる - appengine の色んな機能を call するときの I/O 待ちを最小化 • appengine やるなら Go で、でしょ!状態 - (※まだexperimentalです)
  • 6. Agenda 1. Introduction i. Do you know golang? ii. Do you know appengine? iii. Why start appengine with golang? 2. About golang specification 3. Live developing 4. まとめ
  • 7. About golang specification • まずは言語仕様から軽く・・・ • A Tour of Go - http://tour.golang.org/ - 実行するコードは、golang.org サーバ上のGo Playgroundで動作 - 受けたGoコードをサーバでコンパイル・リンク・実行し、そして その結果を返してくれる • A Tour of Go (jp) - http://go-tour-jp.appspot.com/ - 今日はここから要所をピックアップすることにします - 数が多いので巻き気味でいきます
  • 9. About golang specification #4) Packages • プログラムの動作の始点は main パッケージ内 • パッケージ名はインポートパスの最後の要素と同じになる - “math/rand” パッケージに属するプログラムは、 “package rand” から始まるコード群で構成される
  • 10. About golang specification #6) Exported names • パッケージをインポートすると、そのパッケージが外部に 公開(エクスポート)している名前(変数や関数)を参照 することが可能 - 名前の最初が大文字で始まる場合はエクスポートされる - Hoge ならエクスポートされるが、 hoge だとされない
  • 11. About golang specification #7, 8, 9, 10) About Functions • 引数定義では、型が変数名の後にくるので注意。戻り値の型は引数定義の後ろに • 2つ以上の関数の引数が同じ型である場合には、最後の型だけ書くことができる • 複数の戻り値を返すことが可能 • 戻り値にもパラメータを取ることも可能(その場合、return だけ書けば良い)
  • 12. About golang specification #11, 12, 13) Variables • var ステートメントで変数を宣言 • 2つ以上連続した変数の型が同じなら、最後に一回だけ書けばOK(関数の引数 リストと同じ) • 変数一つ一つに initializer を与えることも可能。その場合、型は省略できる • := を用いることで暗黙的な型宣言も可能 - Ruby でいう ||= に似てるなー
  • 13. About golang specification #14) Basic types • Go の基本型は以下。 - bool - string - int int8 int16 int32 int64 - uint uint8 uint16 uint32 uint64 uintptr - byte - rune - float32 float64 - complex64 complex128
  • 14. About golang specification #15) Constants • 定数は、キーワード const を使って宣言 • character、string、boolean、数値(numeric)のみで宣言 可能 • := を使っての宣言は不可
  • 15. About golang specification #17, 18, 19, 20) For • Go でのループ処理に使えるのは for ループだけ、while はない • 括弧 ( ) はつけてはならない。中括弧 { } は必要 • 条件の前後は空にできるし、セミコロンを抜くこともできる … これが Go での while! • 条件を省略すれば無限ループに
  • 16. About golang specification #21, 22, 23) If • 括弧 ( ) はつけてはならない、中括弧 { } は必要 • 条件式の前に短いステートメントを記述することができる - ここで宣言された変数は、else ブロック内でも使える
  • 17. About golang specification #25, 26) Structs • struct(構造体)というものがある • フィールドにはドットを用いてアクセス
  • 18. About golang specification #27, 29) Pointers, The new function • new(T) と書くと、ゼロ初期化した T の値をメモリに割り当て、その ポインタを返す - Go にはポインタがある(ポインタ演算はない) - 構造体のフィールドは、構造体のポインタを通してもアクセスでき る
  • 19. About golang specification #30, 31, 32) Slices • 配列変数は配列全体。スライスとは、ある配列内の連続した領域への参照のこと • make 関数を使って生成:ゼロ初期化した配列をメモリに割り当て、その参照が 生成される
  • 20. About golang specification #34, 35) Range • slice などの要素ひとつずつを反復処理するのに使える • i はインデックス。その後ろに変数を置くと値が取れる • インデックスや値の代入先をアンスコ”_”にすることで、 破棄することも可能
  • 21. About golang specification #37, 38, 39, 40) Maps • 連想配列。make関数 で作成 • キーが存在するかどうかは、2つ目の戻り値を受け取ることで確認 - map m に key があれば、 ok は true になる - なかった場合、ok は false になり、 v は、map の要素の型のゼロの値 になる
  • 22. About golang specification #42, 43) Function • 関数も値として扱える - 関数そのものを変数に代入できる • Go の関数はクロージャだそうです - クロージャ:関数閉包。引数以外の変数を自身のスコープにおいて解決する関数オブジェクト - pos, neg の各クロージャは、自身の変数 sum へアクセスして変更できる(「sum にバインド されている」)
  • 23. About golang specification #45, 46) Switch • 上から下に評価。一致したところから下は評価されない • 各 case の最後で break する - Java とかだと、case 文を実行した後でも switch 文全体の処理から抜けず に次の case の判定を行う - fallthrough 文を case の最後に記述すれば、 Java とかと同じ挙動に
  • 24. About golang specification #50, 51) Methods • メソッドの定義は、任意の type に対してのメソッドレシーバを定義 することで行える(Go にはクラスの仕組みがない) - Vertex に対して Abs() が呼び出されたら func Abs() が実行される - 他のパッケージからの型や基本型にはメソッドを定義できない
  • 25. About golang specification #52) Methods with pointer receivers • メソッドレシーバは、ポインタ型でも値型でも書ける • pointer receiver を使うことで、各メソッド呼び出しで値をコピーするのを回避 (元の値を変更)できる • Scale メソッドが value receiver だった場合、元の値を変更することができない (元の値のコピーに対する操作になる)
  • 26. About golang specification #53) Interfaces • インターフェース型は、メソッド群として定義される。 • そのインターフェース型の値は、それらのメソッドを実 装する任意の値、となる
  • 27. About golang specification #55) Errors • エラーを表す際には、組込みのインターフェース型の error を使う • 文字列を返す Error メソッドを実装しておく • fmt パッケージの各種表示ルーチンは、error 型を渡された場合、自動的に Error メソッドを呼び出す
  • 28. About golang specification #63) Goroutines • “goroutine” は、いわゆるスレッド(軽量) • “go f(x, y, z)” と書けば、関数 f は新しい goroutine 上で実行される • x, y, z の評価は現在の goroutine(スレッド)で評価され、新しい goroutine で実行されるのは、関数 f • goroutine は同じアドレス空間で実行されるため、共有メモリへの アクセスは、きちんと同期する必要がある…
  • 29. About golang specification #64, 65) Channels • goroutine 間での通信には channel を用いる • ch <- hoge で、hoge をチャネル ch に送る • fuga <- ch で、チャネル ch から fuga を受信する • チャネルも make 関数で作る。2つ目の引数にバッファ長を与えられる (チャネルはバッファ可能)
  • 30. About golang specification #66) Range and Close • 送り手は、これ以上の送信する値がないことを示すためにチャネル を close できる • for i := range c と書けば、チャネルが閉じられるまで、繰り返し チャネルから値を受信できる
  • 32. Live Developing • せっかくなので、Webアプリっぽい挙動をするものを - なおかつ、勉強会の時間内で完成するようなもの - Mashupなかんじで、「はてなスターチェッカー」を 作る! - http://developer.hatena.ne.jp/ja/documents/star/ apis/count • Googleアカウントを作るところからやりますので、みな さんもぜひ、おうちでやってみてください!
  • 33. Live developing #1) install golang • $ brew install go • python 2.7.x 以上が必要とのこと - $ python --version • 作業を行うロケーションを GOPATH として設定しておくと 便利って誰かが言ってた - $ mkdir $HOME/go - $ export GOPATH=$HOME/go • さらに bin サブディレクトリにもPATHを通しておくと便利 らしいけど appengine 開発にはあまり関係ないかも - $ export PATH=$PATH:$GOPATH/bin
  • 34. Live developing #2) Download appengine SDK • https://developers.google.com/appengine/ downloads?hl=ja にいく • 「Google App Engine SDK for Go」がちゃんとあるの で、ダウンロード • 適当なところに展開 • 展開してできたディレクトリを PATH に通しておく - $ export PATH=$PATH:$GOPATH/go_appengine
  • 35. Live developing #3) Hello World (1) • 公式チュートリアルのHello Worldをやってみましょう - https://developers.google.com/appengine/docs/go/ gettingstarted/helloworld • $ cd $GOPATH • $ mkdir -p workspace/hello • $ cd workspace/hello
  • 36. Live developing #3) Hello World (2) • hello.go を作る
  • 37. Live developing #3) Hello World (3) • 設定ファイル app.yaml を書く • hello.go と同じ階層でOK
  • 38. Live developing #3) Hello World (4) • ローカルでサーバを立ち上げてみる - $ goapp serve . • http://localhost:8080 にアクセスしてみる - 上のような画面が表示されたらOK
  • 39. Live developing #4) Take an Google Account (1) • http://appengine.google.com/ にいく • 「アカウントを作成」しましょう
  • 40. Live developing #5) create appengine application (1) • 「Create Application」ボタンを押せば appengineアプ リケーションの作成が始まります • 電話認証が必要な場合があります
  • 41. Live developing #5) create appengine application (2) • 「Application Identifier」には、世界でユニークなアプリケーション識別子 を入力します(これは覚えておこう) • 「Application Title」は、自分がわかるような文字列ならなんでもOK • その他もそのままでOK • 1アカウントで10アプリまで作れます
  • 42. Live developing #5) create appengine application (3) • Congraturations !!
  • 43. Live developing #6) Deploy Application to appengine (1) • 先ほどの Hello World をデプロイしてみましょう - $ goapp deploy . • GMailアドレスとパスワードを聞かれます • もしデプロイに失敗したりした場合、前回のデプロイ作 業をロールバックさせる必要があります - $ $GOPATH/go_appengine/appcfg.py rollback .
  • 44. Live developing #6) Deploy Application to appengine (2) • デプロイが完了したら、先ほど覚えておいたアプリケーショ ン識別子を下記URLに当てはめてアクセス! - http://<application-identifier>.appspot.com/ • さきほどのローカル実行時と同じ画面が表示されたら、 Congraturations !! • いま、あなたの Hello World は全世界に公開されました!
  • 45. Live developing #7) Develop “star-checker” (1) • では、このHello Worldをベースに、本来の目的の「はてな スターチェッカー」を作ってみましょう • まずはルーティングを追加・変更します
  • 46. Live developing #7) Develop “star-checker” (2) • チェック結果(APIからのレスポンス)を表す struct を 作成します • 変数名を大文字にして、Export可能にしておきます
  • 47. Live developing #7) Develop “star-checker” (3) • htmlのテンプレートを作りましょう • ちゃんとしたWebアプリをつくるときは、普通にhtmlを 置いてAjaxでDOM操作するとか…
  • 48. Live developing #7) Develop “star-checker” (4) • トップページのルーティングハンドラを作りましょう - いまあるハンドラは消しちゃいましょう - 初期表示としては空っぽの結果表示をしておくことにしましょう、 そのために、空の StarReport をテンプレートに食わせときましょう
  • 49. Live developing #7) Develop “star-checker” (5) • APIのレスポンスは JSON なので、それを parse する メソッドを定義 - StarReport に JsonProc というメソッドレシーバを定義する形 - JSON の parse 処理は今回の本質ではないので、さらっと
  • 50. Live developing #7) Develop “star-checker” (6) • 最後に、チェックボタンをsubmitされたときのルーティングハンドラを作りましょう - WebAPIを、appengine 上のアプリケーションからリクエストする際には、 appengine の「URL Fetch」というAPIを用います - appengine の機能を利用する際には、予め context を取得しておく必要があります - (続きます)
  • 51. Live developing #7) Develop “star-checker” (7) • 続きです - APIのレスポンスの body を ioutil.ReadAll で取得します - defer : これを実行した関数がリターンする直前に、defer で指定した 関数の呼び出しが行われるようにスケジューリングしてくれる - (さらに続きます)
  • 52. Live developing #7) Develop “star-checker” (8) • さらに続きです - string( hoge ) で、文字列に変換 - さっきのメソッドレシーバにより、parse された内容は report に - その report をテンプレートに食わすと…
  • 53. Live developing #8) Congraturations!! • できたっ!! - あとはこれをもう一度デプロイすれば、Webアプリ「はてなスター チェッカー」の全世界へのリリースが完了です! - スターの数がわりと少ないのは、バグではないです。
  • 54. Live developing #9) Appendix • コード全文は下記にて公開しております - https://github.com/a-know/star_checker
  • 55. • Goの言語仕様をざっと見てみました • 実際にHello World と はてなスターチェッカー のふたつ のアプリを書いてみました • appengine にデプロイしてみました • 言語はやっぱり使っていかないと習得できない!けど、 appengineはそれにじゅうぶん応えてくれる(勉強目的 くらいならタダで使える)プラットフォームだよ! まとめ