· golang Go言語 GAE/Go

Google App EngineのGo言語(GAE/Go)のチュートリアルをやったメモ。

  • このエントリーをはてなブックマークに追加

はじめに

2012/04/15に東海GTUG主催の

「[愛知/名古屋]作ればわかる! Google App Engineハンズオン #1(東海GTUG)」

に参加しました。

この本は一度写経したことがあって、せっかく著者さんがいらっしゃるので、もう一度やるのもありだったのですが、

GAE/Goチームができてたので、そちらに惹かれ

GAE/Goのチュートリアル

をすることにしました。

さて、チュートリアルは

イントロダクション

があって、

次にGAE/Goの

環境構築です。

最終的にはデプロイまでのチュートリアルがあります。実際にチュートリアルを最後までやって、忘れないためにメモと気づいた事などを書いていきます。

環境構築

の最初の方に「Python 2.5をインストールしてください」とありますが、2.7でも動きました。Pythonのバージョンを確認するには、ターミナルで次のコマンドで確認できます。

% python -V
Python 2.7.1

## Google App Engine SDK for Goをダウンロード 下記のURLからSDKをダウンロードします。 GAE SDK for Go 僕はMacなので、「go\_appengine\_sdk\_darwin\_amd64-1-6-4.zip」をダウンロードしました。 解凍すると、`google_appengine`というディレクトリができるので、そのディレクトリを適当なディレクトリに移動します。 僕は、ディレクトリ名を変更して、次の場所に置きました。
/gae/appengine-go-sdk/

チュートリアルにもTo simplify devlopment and deployと書かれていますが、

環境変数のPATHを以下のように追加すると、コマンドをタイプする時面倒ではなくなります。

bash系だと、

export PATH=/path/to/google_appengine:$PATH

csh系だと、

setenv PATH /path/to/google_appengine:$PATH

短いメッセージを表示するだけのアプリケーションを作ります

myappという名前のディレクトリを作成して、myappの下にhelloというディレクトリを作成します。

helloディレクトリの下にhelloパッケージGoソースファイルを作成していきます。

さっそく、hello.goを作成しましょう。

package hello
import (
    "fmt"
    "net/http"
)
func init(){
    http.HandleFunc("/", handler)
}
func handler(w http.ResponseWriter, r *http.Request){
    fmt.Fprint(w, "Hello, world!")
}

次に設定ファイルapp.yamlmyappの下に作成します。

applicaiton:helloworld
version:1
rutime:go
api_version:go1
handlers:
- url:/.*
script:_go_app

結果、次のような構成になっていればOK。

myapp/
    app.yaml
    hello/
        hello.go

間違って、myappディレクトリの下にhello.goがある場合、

Compile error:
2012/04/15 13:47:48 go-app-builder: Failed parsing input: go files must be in a subdirectory of the app root

のようなエラーが出ます。helloディレクトリの配下にhello.goを移動させて解決。

アプリケーションの実行

次のコマンドで、作成したアプリケーションの実行ができます。

$ ls
myapp
$ dev_appserver.py mypp/
~
INFO     2012-04-24 22:44:48,883 dev_appserver_multiprocess.py:647] Running application dev~helloworld on port 8080: http://localhost:8080
INFO     2012-04-24 22:44:48,883 dev_appserver_multiprocess.py:649] Admin console is available at: http://localhost:8080/_ah/admin

Running application…とでたらサーバーが起動。http://localhost:8080をブラウザに入力すると、

Hello, world!と出ているはず。

サーバーを止めるには、Control-C

たとえば、サーバーを動かしている状態でhello.goを編集した場合、サーバーを一旦止める必要はありません。

http://localhost:8080のリロードでOKです。

データベースのデータを削除するには

データベースを使ったチュートリアル][3]があるのですが、データベースに登録の仕方

・使用の仕方が書いており、最後「Clearing the Development Server Datastore」でデータベースに登録したデータを消去するには、

次のコマンドで消すことが可能です。

$ dev_appserver.py --clear_datastore myapp/

しかし、これで消えない時があります。それは、サーバー起動中です。データベースのデータを消去するには、

サーバーをControl-Cでシャットダウンしてください。

デプロイするには

Goアプリケーションをデプロイするには、app.yamlapplicationを、

登録したアプリケーションIDに変更して、次のコマンドを実行します。

$ appcfg.py update myapp/

GAE/Jで作っていたアプリケーションIDを利用して、デプロイコマンドを打つと、

The 'go' runtime is only supported for apps using the High Replication Datastore.

と出て、デプロイできません。Storage SchemeHigh Replicationではなく、

Master/Slaveであったことが原因でした。あたらしくアプリケーションIDを作り直し、このとき

DatastoreはHigh Replicationであることを確認して、上記のデプロイコマンドを打って、無事デプロイできました。

Storage Scheme

emacsのシンタックスハイライトを設定する

Goのソースのmisc(GOROOT/misc)ディレクトリにemacsや、vimなどの

シンタックスハイライトを設定できる設定ファイルが入っています。

emacsのシンタックスハイライト設定をしたいたため、misc/emacs配下にある

go-mode-load.elgo-mode.elの2つを~/.emacs.d/にコピーし

~/.emacsに次のように記述します。

;Go言語シンタックスハイライトファイルの読み込み
(add-to-list 'load-path "~/.emacs.d/" t)
(require 'go-mode-load)

あとは、source ~/.emamcsとしてgoファイルを開けばシンタックスハイライトされます。

goのシンタックスハイライト

[3]: https://developers.google.com/appengine/docs/go/gettingstarted/usingdatastore

  • このエントリーをはてなブックマークに追加
  • LinkedIn
  • Tumblr
  • Reddit
  • Google+
  • Pinterest
  • Pocket