注意! この記事はQiitaにて公開されていた内容をimportしたものです。
これらの内容は場合によっては陳腐化していて役に立たなくなっていたり、有害であったり、現在の著者の主張と異なることがあります。
皆様の判断の上でご利用いただけますと幸いです(度を超してヤバいものは著者に連絡して頂ければ対応します m(_ _)m)


そもそもどうしてこうなった

「問題になった」などと書かれているところは主に俺にとって問題になったという話です。 まじめに取り組んでいる世間的には遠い昔の話だったかも知れません。

  • “appengine”.Context と “golang.org/x/net/context”.Context は別物
  • これがピュアなGoのライブラリとAppEngine専用のライブラリにおいて微妙な混乱を引き起こしていた(がappengine世界に閉じ込もっている限りは問題が露見しづらかった)
  • Google Cloud Storageライブラリがよりによってcontext.Contextを要求することが一部で話題に
  • http://blog.a-know.me/entry/2015/04/19/005444
  • newappengineという地獄
  • 個人的には mjibson/goon が 新appengineパッケージに移行した影響で旧appengineを使い続けたままの自分のプロジェクトが壊れたのが一番痛かった
  • forkして騙し騙し。。。
  • 時は過ぎてほぼほぼどうすればいいのか確立されたかなーという感じになったので自分のプロジェクトを新appengineに移行した

特に問題なくいけたので(そこまで複雑なこともしてなかったので)、どうしたのかメモを公開します。とはいえ大したことはやってません。

移行方法

import文の編集

import "appengine"
↓
import "google.golang.org/appengine"

import "appengine/datastore"
↓
import "google.golang.org/appengine/datastore"

他にもappengine/*なパスはすべて置き換えていく。

旧パッケージと異なるAPI部分の書き換え

上記手順でおおよそはうまくいくが、うまくいかない箇所も多少ある。

appengine.Context.Infof とかのロギング系どこいった

ここにある https://godoc.org/google.golang.org/appengine/log

import "google.golang.org/appengine/log" しつつ:

// 古appengineパッケージでのやり方
c := appengine.NewContext(r)
c.Errorf("Hoge: %v", err.Error())
↓
// 新しいappengineパッケージでのやり方
c := appengine.NewContext(r)
log.Errorf(c, "Hoge: %v", err.Error())

他に変更点は?

このあたりを参照 https://github.com/golang/appengine#3-update-code-using-deprecated-removed-or-modified-apis