みずりゅの自由帳

主に参加したイベントやソフトウェア技術/開発について記録しています

「Go言語によるWebアプリケーション開発」で「自分のユーザ名の表示」でハマる

「Go言語によるWebアプリケーション開発」を写経していた際に、「2.6.3 自分のユーザ名の表示」の章でちょっとハマった。
teratailで同じようにハマってた人がいたみたいなので、備忘のために記載しておく。

https://teratail.com/questions/55504


発生した事象としては、「表示されていた入力用のテキストエリアや送信ボタンが消えた」である。
f:id:mzryuka:20181013164841p:plain


この場合、結論から言うと下記の修正もれ。

t.templ.Execute(w, data)

修正前は「Execute(w, r)」になっている。
ここを上記のように「Execute(w, data)」へ修正することで、テンプレートのhtmlg側にdataオブジェクトが渡っていき、html側のアノテーション表記「{{.UserData.name}}」が有効になる。修正はせずに「data」を渡していない場合、「{{.UserData.name}}」の部分でエラーが発生してしまい、html文が途中で終わってしまう。
f:id:mzryuka:20181013164858p:plain

そのため、画面上にはタイトルだけ表示されて入力用のテキストエリアや送信ボタンが消えてしまった状態の画面になる。

次のように変更しましょう。」系での記載の場合、基本的には「太字の部分」を追記するので事足りる。しかし、それでも動かない場合には、一緒に記述されている細字の部分も確認してみると良い。今回の例では、この細字部分の変更に気づかなかったのが要因である。

なお、書籍中にはきちんと「このdataオブジェクトが、テンプレートのExecuteメソッドの第2引数として使われます。」と記述がある。よって、文章もしっかり読めばここの修正には気づける。でも、「写経→動かして動作確認→文章読んで内容確認」みたいにしていると、後手に回ってしまうかも。


書籍との比較が苦手なら、正誤表とともに書籍のサンプルプログラムがGithubに上がっている。なので、そっちとの比較でも良いかも。

github.com