Go/構造体
Go言語のstruct
は、異なる型のフィールドをまとめて一つの型として定義するための複合型です。オブジェクト指向言語のクラスに近い役割を果たします。
基本的な定義
type Person struct { Name string Age int }
初期化の方法
// ゼロ値で初期化 var p Person // フィールドを指定して初期化 p1 := Person{Name: "太郎", Age: 30} // 順序通りに値を指定 p2 := Person{"花子", 25} // newを使った初期化(ポインタが返される) p3 := new(Person) p3.Name = "次郎" p3.Age = 28 // アドレス演算子を使った初期化 p4 := &Person{Name: "美香", Age: 22}
フィールドへのアクセス
// 値の設定 p.Name = "田中" p.Age = 35 // 値の取得 fmt.Println(p.Name, p.Age) // ポインタ経由でのアクセス ptr := &p ptr.Name = "佐藤" // (*ptr).Name と同じ
埋め込み(Embedding)
type Employee struct { Person // 匿名フィールド(埋め込み) Company string Salary int } emp := Employee{ Person: Person{Name: "山田", Age: 32}, Company: "ABC株式会社", Salary: 500000, } // 埋め込まれたフィールドに直接アクセス可能 fmt.Println(emp.Name) // emp.Person.Name と同じ
メソッドの定義
// 値レシーバ func (p Person) Greet() string { return "こんにちは、" + p.Name + "です" } // ポインタレシーバ func (p *Person) SetAge(age int) { p.Age = age } // 使用例 p := Person{Name: "鈴木", Age: 40} fmt.Println(p.Greet()) p.SetAge(41)
構造体タグ
type User struct { ID int <code>json:"id"</code> Name string <code>json:"name"</code> Age int <code>json:"age,omitempty"</code> }
重要な特徴
- Go言語には継承がありませんが、埋め込みとインターフェースで類似の機能を実現できます
- 構造体は値型なので、代入時にはコピーが作成されます
- 大文字で始まるフィールドは公開(exported)、小文字で始まるフィールドは非公開(unexported)です
- 空の構造体
struct{}
はメモリを消費しません
struct
はGo言語でデータ構造を表現する最も基本的で重要な型です。
{{DEFAULTSORT:こうそうたい}}
カテゴリ:Go