はじめに
こんにちは、皆さん!今回は、Go言語の重要なデータ構造であるstructについて学んでいきましょう。structは、複数のフィールドを持つデータ型を定義するために使用されます。オブジェクト指向プログラミングのクラスに似ていますが、Go言語ではシンプルで効率的な方法でデータを扱うことができます。
structの基本
まずは、structの基本的な定義方法を見てみましょう。
package main
import "fmt"
// Personという名前のstructを定義
type Person struct {
Name string
Age int
}
func main() {
// Person型の変数を作成
p := Person{Name: "Alice", Age: 30}
fmt.Println(p)
}
{Alice 30}
この例では、Personという名前のstructを定義し、NameとAgeという2つのフィールドを持っています。main関数内でPerson型の変数pを作成し、フィールドに値を設定しています。
フィールドへのアクセス
structのフィールドにアクセスする方法を見てみましょう。
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
p := Person{Name: "Alice", Age: 30}
fmt.Println("Name:", p.Name)
fmt.Println("Age:", p.Age)
}
Name: Alice
Age: 30
この例では、p.Nameとp.Ageを使ってstructのフィールドにアクセスしています。
メソッドの定義
structにメソッドを定義することもできます。以下の例を見てみましょう。
package main
import "fmt"
type Person struct {
Name string
Age int
}
// Person型に対するメソッドを定義
func (p Person) Greet() {
fmt.Printf("Hello, my name is %s and I am %d years old.\n", p.Name, p.Age)
}
func main() {
p := Person{Name: "Alice", Age: 30}
p.Greet()
}
Hello, my name is Alice and I am 30 years old.
この例では、Person型に対してGreetというメソッドを定義しています。Greetメソッドは、Personのフィールドを使って挨拶メッセージを表示します。
ポインタレシーバ
メソッドを定義する際に、ポインタレシーバを使うこともできます。これにより、メソッド内でstructのフィールドを変更することができます。
package main
import "fmt"
type Person struct {
Name string
Age int
}
// ポインタレシーバを使ってメソッドを定義
func (p *Person) HaveBirthday() {
p.Age++
}
func main() {
p := Person{Name: "Alice", Age: 30}
p.HaveBirthday()
fmt.Println("After birthday:", p.Age)
}
After birthday: 31
この例では、HaveBirthdayメソッドがポインタレシーバを使って定義されています。メソッド内でAgeフィールドをインクリメントすることで、Personの年齢を1歳増やしています。
まとめ
Go言語のstructは、複数のフィールドを持つデータ型を定義するための強力なツールです。基本的な定義方法からフィールドへのアクセス、メソッドの定義、ポインタレシーバの使用方法までを学びました。これらの知識を活用して、より複雑なデータ構造を効率的に扱うことができるようになります。