この短い宣言形式にはいくつかの欠点があり、Goコミュニティはほとんどの状況で長い形式を好むようになりました。短い宣言を使用する場合は、構造体の各フィールドに値を指定する必要があります。気にしないフィールドはスキップできません。これにより、多くのフィールドを持つ構造体の短い宣言がすぐに混乱します。このため、短いフォームを使用して構造体を宣言することは、通常、フィールドがほとんどない構造体で使用されます。これまでの例のフィールド名はすべて大文字で始まっています。これは文体的な好みよりも重要です。フィールド名に大文字または小文字を使用すると、他のパッケージで実行されているコードがフィールド名にアクセスできるかどうかに影響します。構造体フィールドのエクスポート構造体のフィールドは、Goプログラミング言語内の他の識別子と同じエクスポートルールに従います。フィールド名が大文字で始まる場合、構造体が定義されたパッケージの外部のコードによって読み取りおよび書き込み可能になります。フィールドが小文字で始まる場合、その構造体のパッケージ内のコードのみがそのフィールドを読み書きできます。この例では、エクスポートされるフィールドとそうでないフィールドを定義します。string`フィールドです。secret`フィールドにアクセスしたり設定したりできません。この例のように、同じパッケージ内でこれらのフィールドにアクセスできます。+`を参照し、そこに保存されている値を取得できます。エクスポートされたメソッドによって仲介される構造体へのアクセス権を持つ、エクスポートされていないフィールドを持つことが一般的です。構造体を表す新しい型を定義することに加えて、インライン構造体も定義できます。これらのオンザフライの構造体定義は、構造体型の新しい名前を発明するのに労力が無駄になる状況で役立ちます。テストでは構造体を使用して、特定のテストケースを構成するすべてのパラメーターを定義することがよくあります。+`のような新しい名前を思い付くのは面倒です。インラインの構造体定義は、変数の割り当ての右側に表示されます。定義した各フィールドの値に追加の括弧を追加することにより、すぐにそれらのインスタンスを提供する必要があります。次の例は、インライン構造体の定義を示しています。c.Type)}この例の出力は次のとおりです。+`定義を配置することでインライン構造体を定義しています。前の例のように構造体のフィールドを定義しますが、すぐに別のペアのブレースと各フィールドが想定する値を指定する必要があります。この構造体の使用は、以前とまったく同じになりました。ドット表記を使用してフィールド名を参照できます。インライン構造体が宣言される最も一般的な場所はテスト中です。これは、特定のテストケースのデータと期待値を含むように1回限りの構造体が定義されることが多いためです。構造体は、情報を整理するためにプログラマーによって定義された異種データのコレクションです。`変数が一緒に属していたか、またはどちらが異なっていたかを覚えることが難しくなります。+`を使用してより適切にグループ化されるかどうかを自問してください。これらの変数は、ずっと高いレベルの概念をずっと説明している可能性があります。