Go言語の構造体を見てきていますが、この構造体も名前を持たないものを作って利用することができます。
ここでは、この匿名の構造体(Anonymous structs)について触れておきます。
匿名の構造体(Anonymous structs)
匿名の構造体(無名構造体)を見て行きますが、通常の構造体と比較して見るのがいいと思います。
基本的な構造体は、次のようなコードで確認することができます。
package main
import "fmt"
type character struct {
name string
age int
birthplace string
}
func main() {
c := character{
name: "新垣結衣",
age: 32,
birthplace: "沖縄県",
}
fmt.Println(c)
fmt.Println(c.name, c.age, c.birthplace)
}
typeキーワードでstruct型を作っています。
main()関数の中で構造体のデータを当てはめて出力しています。
実行すると、次のように表示されます。
{新垣結衣 32 沖縄県}
新垣結衣 32 沖縄県
このコードと比較して匿名の構造体を見ていきましょう。
匿名の構造体は次のような形で定義します。
変数 := struct {
フィールド名 型名
フィールド名 型名
}{
フィールド名: 値,
フィールド名: 値,
}
通常の構造体との違いは、当然ながら構造体名を使わずに直接structを波括弧{}ブロックで設定し、フィールド名と型名を指定します。それに続けて波括弧{}でデータをカンマで区切って当てはめています。
具体的なコードで見てみましょう。
先ほどのコードを匿名の構造体で書き直してみると次のようになります。(値は変えてみました)
package main
import "fmt"
func main() {
c := struct {
name string
age int
birthplace string
}{
name: "本田翼",
age: 27,
birthplace: "東京都",
}
fmt.Println(c)
fmt.Println(c.name, c.age, c.birthplace)
}
main()関数の中で、変数にstructと波括弧で匿名の構造体を定義して、それに続けて波括弧ブロックに値を割り当てています。
Println()で構造体を代入した変数と、フィールド名で指定した値を出力しています。
実行するとこうなります。
{本田翼 27 東京都}
本田翼 27 東京都
同様な形で出力されているのがわかります。
この匿名の構造体は、このmain()関数内の処理だけで行うように、限定された状況などで使うことで、構造体をいろいろ定義することによってあまり利用しない変数が増えて煩雑になることを避けることができるなどの利点があります。
最後に
Go言語の構造体について、匿名の構造体の使い方を扱いました。
構造体として別に予め定義するのではなく、structと波括弧でフィールド名と型名を定義して変数に代入すると同時に、波括弧ブロックを続けて値を割り当てます。
構造体を複数定義することで、あまり利用しない変数が増えてデータの扱いが煩雑になることがあります。これを避けるために匿名の構造体を利用して限定された場で使うということができます。