あるプログラマの日記

プログラマのメモ、出来事、考えたこと、勉強とかの雑記

Go言語でハマったこと

昨年末ごろからGo言語を使って開発をするようになってだいぶん快適になってきたのですが、最近ちょっとハマってしまった事を書き留めておきます。

開発は Go + echo + React + webpack + babel です。

フロントエンドから、JSONデータをGoの構造体の配列として echo の Bind で、受け取っていました。
配列データとは別でもう一つ新規に情報を追加することになり、追加したとたんにデータが取得できなくなったのです。
Bindでは error は発生してないのに、取得したデータが空文字列になるようになり配列の各要素(ポインタ)は nil です。

Go構造体の定義とかフロント側の渡し方の問題ではないかと何度も見直したが、おかしくはなさそうでいろいろ試したのですが、原因がなかなかわからなったのです。
こういうときは、何か根本的な見落としや間違いをしているものです。

そう、根本的なことでした。Goの根本的な決まり事を行っていないことが原因でした。
JSONで受け取る構造体定義のフィールド名の先頭を大文字にしていなかったことが原因でした。
もともと受け取っていた構造体配列の構造体のフィールド名は先頭大文字でしたが、新規追加されるフィールド名と構造体配列として追加したフィールド名の先頭を小文字にしていたことが原因でした。
外部公開するときのGoのシンプルな仕様ですが、Go内で構造体として定義するとき以外も同様で、そのことが抜けてました。
最初、渡し方や受け取り方の間違いではないかとそちらばかりに注意が向いたので気づくのが遅くなってしまいました。