Go言語の構造体リテラルの書き方と便利な使い方
生徒
「Go言語で構造体を使うとき、簡単に初期化する方法ってありますか?」
先生
「はい、それには構造体リテラルという書き方を使うのが便利です。これは構造体に中身を一気に詰めて作れる方法ですよ。」
生徒
「なんだか難しそうですが、初心者でも使えますか?」
先生
「もちろんです!わかりやすく説明していくので、ぜひ一緒に見ていきましょう!」
1. 構造体リテラルとは?
構造体リテラルとは、構造体(struct)の変数を作るときに、中身のデータも一緒に書いて初期化(しょきか)する方法です。
「リテラル(literal)」とは、「その場で書く具体的な値」のことを指します。たとえば数字や文字列もリテラルです。
構造体リテラルを使えば、一行で構造体に値を入れて変数を作れるので、コードがスッキリします。
2. フィールド名ありの構造体リテラル
構造体のリテラルはフィールド名を指定して使うのが基本です。順番を気にせずに書けるので安心です。
type User struct {
Name string
Age int
Email string
}
user := User{
Name: "たろう",
Age: 25,
Email: "taro@example.com",
}
このように、NameやAgeなどのフィールド(項目)ごとに値を指定できます。
3. フィールド名なしの構造体リテラル
Go言語では、フィールド名を省略して、順番に値だけを並べる方法もあります。
user := User{"はなこ", 30, "hanako@example.com"}
ただし、フィールドの順番を覚えていないと間違えやすいため、初心者にはおすすめしません。基本的には、名前付きのリテラルを使うようにしましょう。
4. 構造体リテラルを関数に直接渡す
構造体リテラルは、その場で作って関数に渡すこともできます。
func printUser(u User) {
fmt.Println("名前:", u.Name)
fmt.Println("年齢:", u.Age)
fmt.Println("メール:", u.Email)
}
printUser(User{
Name: "じろう",
Age: 22,
Email: "jiro@example.com",
})
このようにすれば、わざわざ変数を作らなくても、すぐに関数へ渡して処理できます。
5. スライスと組み合わせて使う
構造体リテラルは、スライス(複数のデータを並べたリストのようなもの)と組み合わせて使うと便利です。
users := []User{
{Name: "たろう", Age: 25, Email: "taro@example.com"},
{Name: "はなこ", Age: 30, Email: "hanako@example.com"},
{Name: "じろう", Age: 22, Email: "jiro@example.com"},
}
このように複数の構造体をまとめて書けるので、大量のデータを扱うときに非常に便利です。
6. 空の構造体リテラルを使う
フィールドを何も指定しない{}だけの書き方もあります。
emptyUser := User{}
この場合、すべてのフィールドは""(空の文字列)や0など、初期値(ゼロ値)になります。後から値を設定したいときに便利です。
emptyUser.Name = "さぶろう"
7. 入れ子になった構造体リテラル
構造体の中にさらに構造体がある場合(これを入れ子といいます)も、リテラルで書けます。
type Address struct {
City string
Street string
}
type Person struct {
Name string
Address Address
}
p := Person{
Name: "ゆうこ",
Address: Address{
City: "東京",
Street: "中央1-2-3",
},
}
このようにして、複雑なデータもスッキリ書くことができます。