Go(Golang)の「構造体(struct)」は、複数の異なる型のデータをひとつにまとめることができるユーザー定義のデータ型です。C言語やC++などの構造体と似た役割を持ち、オブジェクト指向言語における「クラス」に近い役割を果たします。ただし、Goにはクラスや継承の概念はなく、構造体とインタフェースを使ってオブジェクト指向的な設計を行います。
1. 基本的な構造体の定義と使用
-
type Person struct { ... }:Personという名前の構造体を定義。 -
NameとAgeは、その構造体のフィールド。 -
フィールドには異なるデータ型を指定できる。
2. フィールドへのアクセスと更新
構造体のフィールドにはドット演算子(.)でアクセスします。
3. 構造体のポインタ
構造体をポインタとして扱うことで、大きなデータのコピーを避けることができます。
Goでは、ポインタ経由のアクセスでも明示的なデリファレンス((*p).Age)は不要で、p.Ageと書けるように設計されています。
4. 無名構造体(匿名構造体)
名前を付けずに一時的に構造体を定義することも可能です。
5. 構造体と関数(メソッドのように振る舞う)
構造体に関連する処理を関数として定義できます。Goではこれを「メソッド」と呼びます。
ポインタレシーバを使えば、構造体の中身を書き換えることができます。
6. ネストされた構造体
構造体の中に他の構造体を含めることもできます。
7. 埋め込み(Go特有の擬似継承)
Goでは構造体の埋め込み(embedding)により、擬似的に継承のような振る舞いが可能です。
まとめ
| 特徴 | 説明 |
|---|---|
| 定義 | type 構造体名 struct { フィールド } |
| アクセス | ドット(.)演算子を使ってフィールドへアクセス |
| ポインタ使用 | 効率的なメモリ使用と値の更新が可能 |
| メソッド | 構造体に関連付けた関数定義が可能(ポインタレシーバも使用可) |
| 埋め込み | 擬似継承を実現するGo独自の構文 |
生成日:2025/05/03