はじめに
こんにちは、皆さん!今回は、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
は、複数のフィールドを持つデータ型を定義するための強力なツールです。基本的な定義方法からフィールドへのアクセス、メソッドの定義、ポインタレシーバの使用方法までを学びました。これらの知識を活用して、より複雑なデータ構造を効率的に扱うことができるようになります。