GAE/goでPOSTした値が取得できなくてむせび泣いた話

先週から仕事でGAE/goをやり始めて毎日勉強してます。
1週間が経ちやっとすこしわかってきた今日クソドハマりして自信を完全に消失したところについて
備忘録と戒めの念を込めて残しておこうと思う。


やりたかったことは入力フォームを表示してユーザが入力したデータをPOSTしてデータストアに書き込むというすごくシンプルなこと。
入力フォームの表示とpostするところまでは単純にhtmlのformタグでやるだけ(ただそれすら知らなくてめっちゃ悩んだけど)

問題だったのはそのpostを受けてデータストアに書き込むところで何故かpostした値が消えてしまっていたこと。
そしてたちが悪いことにlocalでは問題なく動作するのにproductionでのみこの事象が発生するということ。


結論から言うとappengine.NewContextをPOSTデータ取得前に実行するとデータが消えるっぽいです。

ダメな例

c := appengine.NewContext(r)
hoge := r.FormValue("hoge")

OKな例

hoge := r.FormValue("hoge")
c := appengine.NewContext(r)

ただこれだけ。本当にただこれだけ。これだけで丸一日潰れました。
未だに何でダメなのか?そして逆に何でlocalだと動いていたのか?全てが謎に包まれたままで気持ち悪いですが
とりあえず今はこういうものだと割り切ることにしました。

未経験だからってのもあるけどやっぱりWeb系は苦手です。。。