GAE/Go周りのWeb Application実装関連メモ

読了まで:約1分


概要: 本日の​お得情報です。


1. GAE/Go の​テストに​おいて、appengine.Context​ に​依存する​テストは、appengine/aetest​ パッケージを​使う

詳しくは​ Qiita の、

に​載ってる​デス。

2. appengine/user#User が​必要と​なる​テストは、​実際に​ appengine/user の​中身を​ Dump する​サンプルアプリケーションを​作ると​良い

大体中身と​しては、

package userid_test
import (
"appengine"
"appengine/user"
"fmt"
"net/http"
)
func init() {
http.HandleFunc("/google_user", loginWithGoogleAccount)
}
func loginWithGoogleAccount(rw http.ResponseWriter, req *http.Request) {
c := appengine.NewContext(req)
u := user.Current(c)
if u == nil {
fmt.Fprint(rw, "not login")
return
}
fmt.Fprintf(rw, "Email:%v\nAuthDomain: %v\nAdmin: %v\nID: %v", u.Email, u.AuthDomain, u.Admin, u.ID)
}

と​いう​感じの​ GAE/Go Web Application を​書き、​実際に​ログインした​状態が​どういう​感じか、と​いうのを​把握しておくと、appengine/user#User​ に​依存する​テストが​書き易いよ!​ って​話です。

3. GAE/Go で​ Web Application を​書く​際には、appengine​ 関連パッケージに​依存する​実装部分と、​Web Application と​して​必要な​ Interface を​分離しておくと​良い

と​勝手に​思ってるんですが、​これは​どういう​ことか、と​いうと、​例えば​モデル部分で​言えば、

  1. モデルの​操作に​関する​メソッドは​ interface 型で​定義し
  2. appengine/datastore に​依存する​実装は​別パッケージに​分けておくと
  3. あとで、​他の​データストア(例えば​ MySQL とか​)に​移り易い

と​いう​感じです。​はい。

と​言う​コトで

今日は​以上です、​はい。

#FIXME

アバターアイコン兼ロゴ

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。次に備えて待機中。

今は趣味でプログラミングをして生活しています。