Go言語の構造体の基本!定義・初期化・アクセス方法をわかりやすく解説
生徒
「Go言語でいろんな情報を1つにまとめたいんですが、何か方法はありますか?」
先生
「それなら、Go言語の構造体(struct)を使うと便利です。構造体は、複数のデータをひとまとめにできる仕組みです。」
生徒
「複数のデータっていうのは、たとえばどういうものですか?」
先生
「たとえば『名前』と『年齢』と『メールアドレス』など、人に関する情報を一つにまとめたいときなどに使いますよ。では、詳しく見ていきましょう!」
1. Go言語の構造体(struct)とは?
構造体(こうぞうたい)とは、関連する複数のデータをひとつのまとまりとして扱うための型です。Go言語では struct というキーワードを使って定義します。
プログラミング未経験の方は、「バラバラの情報を1つの箱に入れる仕組み」と考えるとイメージしやすいでしょう。名前・年齢・メールアドレスのように、同じ対象に関係する情報をまとめると、管理がとても楽になります。
たとえば、1人のユーザー情報を表す構造体は次のように定義できます。
type User struct {
Name string
Age int
Email string
}
Userという構造体の中に、Name(名前)、Age(年齢)、Email(メールアドレス)という3つのフィールドを用意しています。
このように構造体を使うと、「この人に関する情報はすべてUserに入っている」と整理できるため、コード全体が読みやすくなります。後の章で解説する初期化やアクセスも、この定義が土台になります。
2. 構造体の使い方:初期化する
構造体を使うには、まず「変数」として使えるように初期化(しょきか)します。初期化とは、「構造体の中身を用意して、すぐ使える状態にすること」です。たとえばユーザー情報なら、名前・年齢・メールアドレスをセットにして1人分のデータを作るイメージです。
Go言語の構造体は、初期化の書き方がいくつかありますが、初心者が押さえておくと安心なのは次の2つです。どちらも「User型のデータを作る」点は同じで、書き方と読みやすさが少し違います。
【1】フィールドを順番に指定する方法(短く書けます)
user1 := User{"たろう", 25, "taro@example.com"}
この書き方はサッと書ける反面、「どれが年齢で、どれがメールか」を覚えていないと読み間違えやすい点に注意です。フィールドの順番が変わると、意図しないデータになることもあります。
【2】フィールド名を明示する方法(わかりやすくて安全です)
user2 := User{
Name: "はなこ",
Age: 30,
Email: "hanako@example.com",
}
こちらは「Nameにはこれ、Ageにはこれ」と名前を付けて入れるので、プログラミング未経験でも読みやすくなります。順番を気にしなくてよいので、あとから見返したときも安心です。
まずは、フィールド名を明示する初期化を基本にして覚えると、構造体のデータ作成でつまずきにくくなります。
3. 構造体の値にアクセスする
構造体の中に入っているデータを取り出すには、ドット記法を使います。これは「どの構造体の」「どの項目を使うのか」を、はっきり書ける方法です。
基本の形はとてもシンプルで、「変数名.フィールド名」と書くだけです。人の情報であれば、「このユーザーの名前」「このユーザーのメールアドレス」という感覚で読めるようになります。
実際に、構造体の中の値を画面に表示してみましょう。
fmt.Println(user1.Name) // "たろう"
fmt.Println(user2.Email) // "hanako@example.com"
この例では、user1という構造体からは名前を、user2という構造体からはメールアドレスを取り出しています。
ドット記法は「中身をのぞく」ようなイメージなので、慣れてくるとコードを読んだだけで、どんな情報を使っているのかが自然と分かるようになります。
4. 構造体の値を変更する方法
構造体の中の情報は、あとから変更することもできます。たとえば「年齢が変わった」「メールアドレスを更新した」など、データを最新の状態にしたいときに使います。
変更するときも難しい書き方は不要で、ドット記法で「どのフィールドを書き換えるか」を指定して、普通の変数と同じように代入(=)するだけです。
年齢とメールアドレスを更新する例です。
user1.Age = 26
user1.Email = "new_taro@example.com"
user1.Ageのように書くと「user1のAge」という意味になります。そこへ新しい値を入れることで、構造体の中身が上書きされます。
更新できたかどうかを、表示して確認するだけのシンプルな例も載せておきます。
fmt.Println("更新後の年齢:", user1.Age)
fmt.Println("更新後のメール:", user1.Email)
書き換えた直後に表示してみると、変更が反映されていることが分かります。初心者のうちは、こうやって確認しながら進めると安心です。
5. 構造体と関数を組み合わせて使う
構造体は、関数と一緒に使うことでさらに便利になります。理由はシンプルで、「同じような処理を何度も書かなくてよくなる」からです。たとえば、ユーザー情報を表示したい場面が増えても、関数にまとめておけば呼び出すだけで済みます。
ここでは「ユーザーの情報を表示する」関数を作り、構造体を引数(ひきすう)として受け取る形を見てみましょう。関数に渡すことで、どのユーザーでも同じ手順で表示できます。
ユーザー情報を表示する関数の例です。
func showUser(u User) {
fmt.Println("名前:", u.Name)
fmt.Println("年齢:", u.Age)
fmt.Println("メール:", u.Email)
}
この関数は、受け取ったuの中身(Name / Age / Email)を順番に表示します。ポイントは、uがUser型なので、ドット記法で各フィールドにアクセスできるところです。
作った関数を呼び出すときは、構造体をそのまま渡します。
showUser(user1)
showUser(user2)
これだけで、user1もuser2も同じ表示ルールで出力できます。初心者のうちは「表示処理を関数にまとめる」だけでも、コードがぐっと読みやすくなります。
6. 構造体を配列(スライス)でまとめる
構造体は1つだけでなく、複数まとめて扱うこともできます。複数の構造体を1つの変数にまとめるには、スライス(slice)を使います。
スライスとは、複数のデータを順番に並べた「リスト」のようなものです。
users := []User{
{Name: "たろう", Age: 25, Email: "taro@example.com"},
{Name: "はなこ", Age: 30, Email: "hanako@example.com"},
}
このように複数のユーザーを1つの変数で管理できるため、大量のデータを扱うときにも便利です。
7. わかりやすい命名とコメントを心がけよう
構造体の名前やフィールド名は、日本語に訳せるような「わかりやすい英語」にすると読みやすくなります。また、必要に応じてコメントをつけましょう。
// User は利用者の基本情報を表します
type User struct {
Name string // 名前
Age int // 年齢
Email string // メールアドレス
}
将来の自分や他の人が見たときにすぐ理解できるよう、丁寧な名前と説明を心がけましょう。
まとめ
Go言語の構造体は、複数の関連する情報をひとまとまりに管理するための便利な仕組みであり、プログラムの可読性や保守性を大きく高めてくれる重要な機能です。ひとつの構造体の中に名前や年齢、メールアドレスなどを整理して格納できるため、データの見通しが良くなり、複雑な場面でも扱いやすい構造を組み立てることができます。また、構造体の初期化方法にはさまざまな書き方があり、フィールドを順番で指定する方法やフィールド名を明示する方法など、用途に応じて柔軟な選択ができる点も魅力です。とくにフィールド名を使った初期化は安全性と読みやすさに優れているため、多くの場面で役立ちます。 構造体に格納された値はドット記法を使って簡単に読み取りや変更ができるなど、直感的な操作性もGo言語の特徴のひとつです。ドット記法によって構造体内の情報に連続的にアクセスできるため、複数のデータを扱うときでもスムーズな処理が期待できます。さらに、構造体を関数と組み合わせれば、一つのまとまりをそのまま引数として渡すことができ、細かい値を何度も渡す手間を省くことができます。多くの情報を扱う関数でもコードが簡潔になり、処理内容が整理されやすくなるというメリットがあります。 また、ユーザー情報のような複数の構造体を扱いたい場合には、スライスを使うことでまとめて管理できます。たとえば、ユーザーのリストを一つの変数に並べて管理することで、複雑なデータも体系的に扱えるようになり、大規模なアプリケーションでも活用しやすくなります。こうした構造体とスライスの組み合わせは、日常的なデータ管理において非常に役立つテクニックです。 最後に、構造体を使う際には、フィールド名や構造体名をわかりやすく命名することがとても重要です。役割がひと目で分かる名前にすることで、コードを読む人が理解しやすくなり、保守作業が楽になります。こうした丁寧な命名とコメントづけは、プログラム全体の品質向上につながります。 ここでは、内容の理解をさらに深めるためのサンプルプログラムを掲載し、構造体の使い方を具体的にイメージできるよう構成しています。
構造体の基本操作をまとめたサンプルプログラム
package main
import "fmt"
type User struct {
Name string
Age int
Email string
}
func showUser(u User) {
fmt.Println("名前:", u.Name)
fmt.Println("年齢:", u.Age)
fmt.Println("メール:", u.Email)
}
func main() {
user := User{Name: "さくら", Age: 22, Email: "sakura@example.com"}
showUser(user)
users := []User{
{Name: "たろう", Age: 25, Email: "taro@example.com"},
{Name: "はなこ", Age: 30, Email: "hanako@example.com"},
}
for _, u := range users {
showUser(u)
}
}
上記のプログラムでは構造体を定義し、初期化してから関数に渡すまでの流れを整理しています。一つのユーザー情報を関数で表示し、その後に複数の構造体をスライスにまとめて扱うことで、構造体がどのようにデータ管理に役立つかを具体的に示しています。このように構造体を使いこなすことで、複雑な情報を扱うプログラムでもわかりやすい構造を保つことができます。スライスを使えば、複数の構造体をひとつのまとまりとして扱えるため、大規模なデータ処理を行う際にも非常に効果的です。構造体の持つ柔軟性は、さまざまなアプリケーション開発で応用できる力強い特徴となります。 加えて、構造体を関数で扱う際には、引数として構造体を渡すことで、多くの値を整理して扱えるというメリットもあります。こうした書き方に慣れると、Go言語での開発がよりスムーズになり、扱えるデータの幅も広がっていくでしょう。日常的に触れる機会の多いデータ管理にも十分適用できるため、構造体の基本をしっかりと身につけておくことが大切です。
生徒
「今日学んだ構造体って、本当に便利なんですね!名前や年齢をひとつにまとめて扱えるのがすごくすっきりしていて使いやすそうだと思いました。」
先生
「そうだね。構造体を使えば複数の情報を整理してひとつのまとまりとして扱えるから、プログラムの見通しがとても良くなるんだよ。」
生徒
「スライスと組み合わせることで複数のユーザーをまとめて扱えるところも便利ですね。これなら大人数のデータでも管理しやすそうです!」
先生
「その感覚はとても大切だよ。構造体とスライスを組み合わせれば、大規模なデータ処理も効率的にできるようになるんだ。」
生徒
「関数に構造体を渡す書き方も思ったより簡単で、複雑だと思っていた処理がすごく整理されて書ける感じがしました!」
先生
「まさにそのとおり。構造体を使った書き方は柔軟で扱いやすいから、これからの開発にもどんどん活かしていけると思うよ。」
【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導
「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。
本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。
具体的な開発内容と環境
【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。
【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。
この60分で得られる3つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!