2019の3日目の記事です。普段はGoでゲームサーバをゴリゴリ書いています。はじめにGoにはEmbeddingと呼ばれる機能があります(日本語では「埋め込み」と書かれることが多いと思いますが、この記事ではEmbeddingと記述します)。このEmbeddingは便利ですが「複数の構造体を使ってEmbeddingした際に同名のフィールドが存在する」と思わぬ罠にハマります(私は最近ハマった笑)。ハマったからにはネタにせねば!ということで書いていきます!!Embedding同名フィールドを明示的に参照まずEmbeddingして埋め込んだ構造体のフィールドを参照してみましょう。構造体を前提に説明します。Embeddingしています(ダジャレみたいになってしまった笑)。以下のように参照すると、問題なく参照できていますね。どちらのものかを「明示的に」指定すれば参照できます。e.DuplicatedKey)結果はエラーになります。フィールドを呼び出したいの?」となるわけです。used.同名フィールドのネストが異なる場合はよりネストが深い方のフィールドは無視されるみたいです。(こちらが今回の場合ですが)同名フィールドのネストが同一である場合、参照時にエラーになるとのこと(これは先ほど確認した挙動と同じですね)。書かれているように「参照されない場合はエラーにならない」という挙動のようです(最初の例でも参照しなければエラーになりませんでしたね)。するとどうなるか「参照しなければエラーにならないのだから何も問題ないのでは?」と思われた方も多いと思います。同名フィールドを参照してしまってもエラーになるので気づくだろうと思いますよね?自分が参照するならば・・・ですが。V2:2}おわかりいただけただろうか・・・。情報がゴッソリ抜け落ちています。時に同名フィールドを参照して、エラーになった際にそのフィールドを無視する挙動になっているのではないかと思います。エラーを返していません。元に戻るかのテスト」ってあまり書かないと思います。メソッドが識別できるようにしてあげれば良さそうです。試してみるとうまくいっていますね。タグをつけるとjsonの構造が変化します。それぞれ「別の名前」でタグをつけてあげるという手があります。別名のタグをつけました。なって、jsonの構造を崩すことなく対処することができるのでオススメです。同じ名前のタグをつけても意味がないので気をつけましょう(自動生成してるとやりがち)。対策としては適切にタグをつけること。系メソッドでも同様の挙動になるかもしれないので気になる方は試してみてくださいね。私の記事は以上です!テックブログ初めて書いたのでドキドキですが楽しんでもらえたらとっても嬉しいです!次回は(次回も?笑)テックブログでおなじみ!平山さんの記事です。08:00【Go】同名フィールドを持つ構造体をEmbeddingするとどうなるのかTweet関連記事2019-12-18新マスタデータ管理システムakashicの開発こんにちは、各位忘年してますか。