構造体とは?
go構造体は、異なるデータ型の変数を一つにまとめるための複合データ型です。例えば、名前、年齢、住所を一つの「人」型としてグループ化することができます。これにより、データの管理と操作が容易になります。
構造体の宣言
構造体はstruct
キーワードを使用して宣言されます。以下に簡単な構造体の宣言例を示します。
type キーワードで構造体をひとつ作るということは、struct で定義された新しい型 (type) を定義する、ということになります。
type {struct_name} struct {
filed1 type
filed2 type
...
}
例
type Person struct {
Name string
Age int
Address string
}
この例では、「Person」という名前の構造体を定義しています。この構造体には、Name、Age、Addressという3つのフィールドが含まれています。
構造体の利用
構造体のインスタンスを作成し、そのフィールドにアクセスして変更することができます。以下に例を示します。
var p Person
p := Person{}
構造体の作成時に初期化できます。
p := Person{
Name: "山田太郎",
Age: 30,
Address: "東京都",
}
フィールド名は省略できます。
p := Person{
"山田太郎",
30,
"東京都",
}
例
package main
import "fmt"
type Person struct {
Name string
Age int
Address string
}
func main() {
var p Person
p.Name = "山田太郎"
p.Age = 30
p.Address = "東京都"
fmt.Println(p)
}
コード:https://go.dev/play/p/mI1M2DWx03C
構造体にメソッドを追加
Go言語では、構造体に対してメソッドを定義することができます。これにより、オブジェクト指向プログラミングのような機能を実現できます。
func (p Person) Greet() string {
return "こんにちは、" + p.Name + "さん!"
}
コード:https://go.dev/play/p/QPZxC61TkQr
無名構造体とネストした構造体
構造体は、無名で定義することも、他の構造体の中にネストして定義することもできます。これにより、より複雑なデータ構造を柔軟に表現できます。
type Employee struct {
Person
Position string
}
この例では、「Employee」構造体が「Person」構造体を含んでおり、追加で「Position」というフィールドがあります。
package main
import "fmt"
type Person struct {
Name string
Age int
Address string
}
func (p Person) Greet() string {
return "こんにちは、" + p.Name + "さん!"
}
type Employee struct {
Person
Position string
}
func main() {
var e Employee
e.Person = Person{
Name: "山田太郎",
Age: 30,
Address: "東京都",
}
fmt.Println(e.Person.Greet())
}
コード:https://go.dev/play/p/pueTJ0QMav6
構造体のエクスポート
他のパッケージから構造体やそのフィールドにアクセスするためには、構造体名とアクセスしたいフィールド名を大文字
で始める必要があります。
// personパッケージ内
package person
// Person 構造体は外部パッケージからアクセス可能
type Person struct {
Name string // 外部パッケージからアクセス可能
age int // ageは小文字で始まるため、personパッケージ外からはアクセス不可
address string // addressは小文字で始まるため、personパッケージ外からはアクセス不可
}
まとめ
Go言語の構造体は、複数の異なる型のデータを一つにまとめ、管理しやすくするための強力なツールです。
最後に、弊社の採用情報にご興味をお持ちの場合は、ぜひカジュアルな面談をお申し込みください。
参照
- Go言語公式ドキュメント: A Tour of Go
- Effective Go: Effective Go